从核心数据中获取对象数组
Get array of objects from core data
我正在尝试调整我用来从核心数据请求获取 id 字典到对象数组的方法。但是,我对我想要的数组感到困惑。基本上,我想要一组具有所有适当属性的联系人。下面哪个联系人对象数组是我想要的fetchedObject
还是tmpArray
?
-(NSMutableArray *) getContactsNeedingSync
{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSManagedObjectContext *context = [IDModel sharedInstance].managedObjectContext;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"needsync==@1"];
fetchRequest.predicate = predicate;
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Contacts" inManagedObjectContext:context];
fetchRequest.entity = entity;
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"cid" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
fetchRequest.sortDescriptors = sortDescriptors;
NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
NSError *error = nil;
if (![fetchedResultsController performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
NSArray *fetchedObjects = fetchedResultsController.fetchedObjects;
//is this the array I want?
NSInteger resultCount = [fetchedObjects count];
if (resultCount == 0) {
NSLog(@"result Count is zero");
return [NSMutableArray array];//nothing in the Core Data store
}
else {
Contacts *contact;
NSMutableArray *tmpArray = [NSMutableArray array];
int i;
for (i = 0; i < resultCount; i++) {
contact = fetchedObjects[i];
tmpArray[contact.cid] = contact;
}
return tmpArray;//is this array I want?
}
context = nil;
}
您的代码创建了一个提取请求并将其设置为收集一组已排序的对象。然后,您使用 NSFetchedResultsController
来收集获取请求的结果。然后你有一些代码对排序后的数据进行排序 (init tmpArray
).
您可以通过删除 NSFetchedResultsController
并直接执行获取请求来简化此操作。 NSFetchedResultsController
没有帮助你,因为你没有向它添加委托或保留它。
由于NSSortDescriptor
,数据也已经排序。事实上,如果不是这样,您会在尝试插入一个不够大的数组时遇到崩溃……因此,删除 tmpArray
和相关代码。
我正在尝试调整我用来从核心数据请求获取 id 字典到对象数组的方法。但是,我对我想要的数组感到困惑。基本上,我想要一组具有所有适当属性的联系人。下面哪个联系人对象数组是我想要的fetchedObject
还是tmpArray
?
-(NSMutableArray *) getContactsNeedingSync
{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSManagedObjectContext *context = [IDModel sharedInstance].managedObjectContext;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"needsync==@1"];
fetchRequest.predicate = predicate;
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Contacts" inManagedObjectContext:context];
fetchRequest.entity = entity;
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"cid" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
fetchRequest.sortDescriptors = sortDescriptors;
NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
NSError *error = nil;
if (![fetchedResultsController performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
NSArray *fetchedObjects = fetchedResultsController.fetchedObjects;
//is this the array I want?
NSInteger resultCount = [fetchedObjects count];
if (resultCount == 0) {
NSLog(@"result Count is zero");
return [NSMutableArray array];//nothing in the Core Data store
}
else {
Contacts *contact;
NSMutableArray *tmpArray = [NSMutableArray array];
int i;
for (i = 0; i < resultCount; i++) {
contact = fetchedObjects[i];
tmpArray[contact.cid] = contact;
}
return tmpArray;//is this array I want?
}
context = nil;
}
您的代码创建了一个提取请求并将其设置为收集一组已排序的对象。然后,您使用 NSFetchedResultsController
来收集获取请求的结果。然后你有一些代码对排序后的数据进行排序 (init tmpArray
).
您可以通过删除 NSFetchedResultsController
并直接执行获取请求来简化此操作。 NSFetchedResultsController
没有帮助你,因为你没有向它添加委托或保留它。
由于NSSortDescriptor
,数据也已经排序。事实上,如果不是这样,您会在尝试插入一个不够大的数组时遇到崩溃……因此,删除 tmpArray
和相关代码。