我目前被困在核心数据的一个奇怪的问题。我正在写的应用程序会从服务器下载一堆数据,并将其转换为核心数据对象并存储。该设备还可以创建新的对象并将其上传到服务器。其中一个对象是一个基本上是文件表示的文档。核心数据相关对象被删除
这个模型是MPDocument
。文档还可以链接到MPPlace
模型和MPUser
模型(用户创建文档,文档属于地点)。
我没有问题从服务器下载对象,并且正在创建和正确分配所有关系。当我尝试在设备上创建一个新文档时,问题就在于此。文档被创建,并且我设置了所有的关系,文档被上传并且一切看起来都很好。但是,当我通过核心数据查看器工具检查数据库时,所有文档对象都没有关于地点关系的值。这发生在所有现有文件上,而不仅仅是新文件。我真的无法弄清楚发生了什么事!
我创建的文档,像这样:
MPUser *current = [MPUser currentUser];
MPDocument *doc = [[MPDocument alloc] init];
doc.name = @"App Upload";
doc.local_url = [NSString stringWithFormat:@"%@", [info valueForKey:UIImagePickerControllerReferenceURL]];
doc.local_url_type = @(MPDocumentUrlTypeAsset);
doc.user = current;
[current addCreatedDocumentsObject:doc];
[doc setValue:self.place forKey:@"place"];
[self.place addDocumentsObject:doc];
然后我有一个文件上传处理所有上传:
MPDocumentUploader *uploader = [[MPDocumentUploader alloc] initWithDocument:doc];
uploader.requestDelegate = self;
uploader.successBlock = ^(MPDocumentUploader *uploader, MPDocument *doc) {
NSLog(@"Got doc = %@", doc);
};
[uploader upload];
当成功块被调用时,文档对象是否有地点关系集。因此,即使上传完成后,该地点也已设置,所以我现在非常困惑,关于完全清除关系的位置。
文件上传看起来是这样的:
- (void) upload
{
.... retrieve the local file and turn into NSData. This is fine
MPRequest *request = [MPRequest requestWithURL:_url];
[MPUser signRequest:request];
[request setDelegate:_requestDelegate];
[request setRequestMethod:@"POST"];
[request mountDocumentUploader:self];
[request submit:^(MPResponse *resp, NSError *error) {
if (!error) {
NSDictionary *data = (NSDictionary *)[resp paramForKey:@"data"];
if (data) {
NSLog(@"Document = %@", _document);
_document.url = [data objectForKey:@"url"];
_document.objID = [data objectForKey:@"id"];
[_document saveLocally];
}
if (_successBlock) {
_successBlock(self, _document);
}
} else {
if (_failBlock) {
_failBlock(self, error);
}
}
}];
}
的MPRequest
类处理所有的实际上传和服务器的请求,但实际上并没有触及MPDocument对象。
我无法弄清楚发生了什么事情或为什么它清除了关系。请有人帮忙!?
更新
我打得四周,发现当提交块被调用时出现错误。注释掉
_document.url = [data objectForKey:@"url"];
_document.objID = [data objectForKey:@"id"];
[_document saveLocally];
按照它的意思工作,但现在这些值显然没有设置。将这两行中的任何一行单独添加回来仍然会导致此问题,因此似乎只是简单地编辑它就会破坏它。仍然不知道为什么虽然:(