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

标签 ios objective-c core-data nsfetchedresultscontroller

我正在尝试调整我用来从核心数据请求获取 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 没有帮助您,因为您没有向它添加委托(delegate)或保留它。

由于 NSSortDescriptor,数据也已经排序。事实上,如果不是这样,您会在尝试插入不够大的数组时发生崩溃……因此,删除 tmpArray 和相关代码。

关于ios - 从核心数据中获取对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34359382/

相关文章:

ios - 将 UITabBarItem 图像左右对齐

ios - 重定向提交到调度队列的 block

objective-c - 如何在 iOS 上的 Core Data 中设置新创建的关系?

ios - 什么类型返回executeFetchRequest

iOS 10 核心数据异常代码错误 : (6922)

ios - 从 AppDelegate 中的 NSMutableDictionary 清除几个推送通知

javascript - Datepicker 在 ionic ios 中不起作用

iOS 在呈现为模板的图像上使用默认颜色

iphone - 如何在 Xcode 5 中将新项目添加到源代码管理?

ios - GHUnit 与 cocoa pod