اختلاف بين الحصول على كائن باستخدام FetchResultController و ManagedObjectContext
سؤال
ما الفرق بين الحصول على عناصر من البيانات الأساسية مع FetchResultController أو ManagedObjectContext ؟؟
1) FetchResultController
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Item" inManagedObjectContext: managedObjectContext]];
NSSortDescriptor *sortDescriptorNameAscending = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptorNameAscending,nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptorNameAscending release];
NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Lists"];
2) managedObjectContext
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Item" inManagedObjectContext:managedObjectContext]];
NSError *error = nil;
NSArray *items = [ managedObjectContext executeFetchRequest:request error:&error];
المحلول
النقطة وراء استخدام NSFetchedResultsController
بدلاً من مجرد أ NSFetchRequest
هو مراقبة بياناتك وطرق الراحة عند العمل مع الأقسام.
عند التعامل مع أ NSFetchRequest
يجب عليك تحديد الأقسام بنفسك وتحتاج إلى إعادة صياغة بياناتك عندما يتغير شيء ما.
عند التعامل مع NSFetchedResultsController
, ، سيحدد أقسامك ، وذاكرة التخزين المؤقت للنتائج (تقديم طلب ثانٍ لتلك البيانات بالقرب من الفوري) ، وتوفير طرق الراحة لـ NstableView. أخيرًا ، عندما تتغير بياناتك ، NSFetchedResultsController
سوف يعلمك من خلال مندوبيها.
البيانات الداخلية لكليهما ستكون هي نفسها. إنها تدير حالة تلك البيانات التي هي الفرق.
نصائح أخرى
ال NSFetchedResultsController
سيخبرك الكائن متى تتغير كائنات الاستعلام. ما عليك سوى توفير كائن مندوب لتلقي المكالمات (انظر المستند لـ NSFetchedResultsControllerDelegate
بروتوكول). كما يوفر لك إدارة قسم مفيدة إذا كنت ترغب في عرض البيانات في عرض الجدول.