如何将获取的对象保存到核心数据
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 获取托管对象?