这是我的问题,我使用核心数据来存储大约58个文档。它们只有4个NSString属性。我有一个帮助器类,它设置为在需要时检索文档,但是当我从初始的getAllDocumentsFromCoreData传回数组时,在downloadDocumentPDFsAndStoreOnDeviceViaWebService中访问时,所有属性似乎都为null。
奇怪的是,当我在getAllDocumentsFromCoreData方法中查看从核心数据中获取的数组时,它会显示正确获取的所有文档/属性。
我做错了什么?我对核心数据相对较新,所以这可能是一个新手的错误。
//USE TO RETRIEVE ALL DOCUMENTS CURRENTLY STORED WITHIN COREDATA
+ (NSArray *) getAllDocumentsFromCoreData
{
CoreData_Helper *helper = [[CoreData_Helper alloc] init];
NSManagedObjectContext *context = [helper managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setReturnsObjectsAsFaults: NO];
NSEntityDescription *entity = [NSEntityDescription entityForName: @"Document" inManagedObjectContext: context];
[fetchRequest setEntity: entity];
NSError *error = nil;
NSArray *fetchedDocuments = [context executeFetchRequest: fetchRequest error: &error];
if (error)
{
NSLog(@"%@", [error localizedDescription]);
}
return fetchedDocuments;
}
+ (void) downloadDocumentPDFsAndStoreOnDeviceViaWebService
{
NSArray *fetchedDocuments = [CoreData_Helper getAllDocumentsFromCoreData];
for (Document *document in fetchedDocuments)
{
NSLog(@"%@", [document fileID]);
}
}
答案 0 :(得分:2)
发生这种情况是因为:
在您的情况下,您需要在getAllDocumentsFromCoreData
中分配托管对象上下文并执行提取。您返回结果,但在函数末尾取消分配上下文。当你查看返回的数组时,上下文消失了,对象也没用了。
您应该在其他地方创建托管对象上下文 - 可能(但不一定)作为存在这些方法的对象的属性。具有相对长寿的上下文对象是典型的,而不是在执行获取之前在本地创建它们。还有其他各种技巧,但在你的情况下,关键在于,在你完成从中获取的所有内容之前,不要让上下文被释放。