如何将获取的对象保存到核心数据

Posted

技术标签:

【中文标题】如何将获取的对象保存到核心数据【英文标题】:How to save fetched objects to core data 【发布时间】:2012-10-22 21:00:25 【问题描述】:

我对一般编程特别是客观的 c 核心数据非常陌生。我正在尝试从电子表格中读取数据并将其显示在表格视图中。我为保存对象而创建的数组是空的。我不确定如何将数据保存到数组中。另外,我收到警告说存储的值永远不会被读取。非常感谢您对此提供的任何帮助——在我力所能及的范围内。

这是我的代码:

DataStorage *parentTab;
parentTab = (DataStorage *)self.parentViewController;
_context = [parentTab context];

[self populateCollegeObjects];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *dataEntity = [NSEntityDescription entityForName:@"CollegeList"     inManagedObjectContext:_context];
[fetchRequest setEntity:dataEntity];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"collegeName" ascending:YES];

NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

[fetchRequest setSortDescriptors:sortDescriptors ];
[sortDescriptors release];
[sortDescriptor release];

NSFetchedResultsController *controller = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:_context sectionNameKeyPath:nil cacheName:nil];
[fetchRequest release];

NSError *error;
[controller performFetch:&error];

for (int counter = 0; counter< [sortDescriptors count]; counter ++)

   if ([_collegeObjects count] == 0)
    
        _collegeObjects = [[NSArray alloc] init];

        CollegeList *addCollege;

        //addCollege = [CollegeList initWithName:<#(NSString *)#> andURL:<#(NSString *)#> andDetail:<#(NSString *)#> forContext:<#(NSManagedObjectContext *)#>_context];
    

【问题讨论】:

我认为 sortDescriptors 和 fetchRequest 释放语句应该在 performFetch 方法之后。 对不起,我没有得到一件事 - 您在 NSFetchedReultsController 中获取数据,然后保存该数据(使用 initWithName)? 你到底在问什么?您想从电子表格中读取数据并将它们放入 tableview 中,然后您有一个空数组?这个数组是从哪里来的?在您的问题中,您一次没有提到核心数据。您在哪里需要这方面的核心数据? 【参考方案1】:

我不太确定您的问题到底是什么。该数组是否假设填充了您的核心数据中的实体?

也许你可以试试这个看看是否有帮助:

[fetchRequest setEntity:dataEntity];
NSArray *fetchedObjects = [_context executeFetchRequest: fetchRequest error: nil];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"collegeName" ascending:YES];

NSArray *sortDescriptors = @[sortDescriptor];
NSArray *sortedFetchedObjects = [fetchedObjects sortedArrayUsingDescriptors:sortDescriptors];

sortedFetchedObjects 应包含您正在查找的已排序对象的数组。

【讨论】:

我尝试了您建议的代码,并将发布声明移至 @user427969 推荐的 perform fetch 方法之后。两者都不起作用 - 数组仍然是空的。

以上是关于如何将获取的对象保存到核心数据的主要内容,如果未能解决你的问题,请参考以下文章

如何将书签添加到 UITableViewCell 并保存到核心数据?

核心数据获取...为啥在将托管对象插入上下文 A 并保存上下文 A 后,不使用上下文 B 获取托管对象?

如何在 RestKit 中保存到 Core Data RKMappingResult 对象?

如何将获取的 iCloud 数据对象保存到单个数组中?

UITableViewCell 图像 + 保存到核心数据

无法将自定义对象从 API 保存到核心数据