Ios 检索NSManagedObjects问题(核心数据)
这是我的问题,我使用核心数据来存储大约58个文档。它们只有4个NSString属性。我有一个helper类,可以在需要时检索文档,但是当我从最初的getAllDocumentsFromCoreData传回数组时,在DownloadDocumentPdfsandStoreOnDeviceViewService中访问时,所有属性似乎都是空的 奇怪的是,当我在getAllDocumentsFromCoreData方法中查看从核心数据获取的数组时,它显示了正确获取的所有文档/属性 我做错了什么?我对核心数据比较陌生,所以这可能是新手犯的错误Ios 检索NSManagedObjects问题(核心数据),ios,objective-c,core-data,Ios,Objective C,Core Data,这是我的问题,我使用核心数据来存储大约58个文档。它们只有4个NSString属性。我有一个helper类,可以在需要时检索文档,但是当我从最初的getAllDocumentsFromCoreData传回数组时,在DownloadDocumentPdfsandStoreOnDeviceViewService中访问时,所有属性似乎都是空的 奇怪的是,当我在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]);
}
}
这是因为:
getAllDocumentsFromCoreData
中分配一个托管对象上下文并执行获取。返回结果,但上下文在函数末尾被释放。当您查看返回的数组时,上下文就消失了,对象也没用了
您应该在其他地方创建托管对象上下文——可能(尽管不一定)作为存在这些方法的对象的属性。典型的做法是使用寿命相对较长的上下文对象,而不是在执行获取之前在本地创建它们。还有各种其他技术,但在您的情况下,关键是在您完成从上下文中获取的所有内容之前,不能让上下文被释放。谢谢您的解释!实际上,我解决了这个问题,为存储nsmanagedcontext的对象创建了一个单例。它工作得很好。非常感谢你!