Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 检索NSManagedObjects问题(核心数据)_Ios_Objective C_Core Data - Fatal编程技术网

Ios 检索NSManagedObjects问题(核心数据)

Ios 检索NSManagedObjects问题(核心数据),ios,objective-c,core-data,Ios,Objective C,Core Data,这是我的问题,我使用核心数据来存储大约58个文档。它们只有4个NSString属性。我有一个helper类,可以在需要时检索文档,但是当我从最初的getAllDocumentsFromCoreData传回数组时,在DownloadDocumentPdfsandStoreOnDeviceViewService中访问时,所有属性似乎都是空的 奇怪的是,当我在getAllDocumentsFromCoreData方法中查看从核心数据获取的数组时,它显示了正确获取的所有文档/属性 我做错了什么?我对核心

这是我的问题,我使用核心数据来存储大约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]);
}

}

这是因为:

  • 托管对象没有对其托管对象上下文的强引用
  • 解除分配托管对象上下文时,从该上下文中获取的任何托管对象都将变得不可访问,属性值设置为nil,因为它们不再与持久存储有任何连接
  • 在本例中,您正在
    getAllDocumentsFromCoreData
    中分配一个托管对象上下文并执行获取。返回结果,但上下文在函数末尾被释放。当您查看返回的数组时,上下文就消失了,对象也没用了


    您应该在其他地方创建托管对象上下文——可能(尽管不一定)作为存在这些方法的对象的属性。典型的做法是使用寿命相对较长的上下文对象,而不是在执行获取之前在本地创建它们。还有各种其他技术,但在您的情况下,关键是在您完成从上下文中获取的所有内容之前,不能让上下文被释放。

    谢谢您的解释!实际上,我解决了这个问题,为存储nsmanagedcontext的对象创建了一个单例。它工作得很好。非常感谢你!