从核心数据中获取对象数组

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 和相关代码。