要删除的核心数据相关对象

时间:2013-01-02 23:23:02

标签: ios cocoa-touch core-data

我目前遇到核心数据的奇怪问题。我正在编写的应用程序从服务器下载一堆数据,这些数据被转换为核心数据对象并存储。设备还可以创建新对象并将其上载到服务器。其中一个对象是Document,它本质上是文件的表示。

此模型为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];

当调用成功块时,文档对象DOES具有设置的位置关系。因此,即使上传完成,该地点也已设置好,所以我现在对于关系被完全清除的地方感到困惑。

文档上传器看起来像这样:

- (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];

按照它的意图工作,但现在这些值显然没有设置。在隔离中一次一个地添加这些行中的任何一行仍会导致问题,因此看起来简单地编辑它就会破坏它。仍然不知道为什么:(

1 个答案:

答案 0 :(得分:0)

好吧我不完全确定发生了什么或者为什么,但是在摆弄代码,清理项目和重新启动我的笔记本电脑之间,似乎已经修复了自己,所以不知道问题是什么,但目前似乎没问题。非常困惑:S