【问题标题】:Get array of objects from core data从核心数据中获取对象数组
【发布时间】:2015-12-18 15:54:52
【问题描述】:

我正在尝试调整我用来从核心数据请求到对象数组中获取 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;
}

【问题讨论】:

  • 你为什么有tmpArray?你为什么使用NSFetchedResultsController
  • 好问题。改编自代码以获取 id 字典...我应该只使用 nsfetch 吗? fetchedObjects 是我需要的一切吗?第二部分可能是多余的。

标签: ios objective-c core-data nsfetchedresultscontroller


【解决方案1】:

您的代码创建一个获取请求并将其设置为收集一组已排序的对象。然后使用NSFetchedResultsController 收集获取请求的结果。然后你有一些代码来处理排序的数据(init tmpArray)。

您可以通过删除NSFetchedResultsController 并直接执行获取请求来简化此操作。 NSFetchedResultsController 对您没有帮助,因为您没有向它添加或保留它。

由于NSSortDescriptor,数据也已经排序。实际上,如果不是这样,您会因为尝试插入一个不够大的数组而导致崩溃......所以,请删除 tmpArray 和相关代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多