IOS / Objective-C:在将托管对象插入核心数据

时间:2015-11-04 12:02:39

标签: ios objective-c core-data

在表示新项目的核心数据中插入新对象,然后在后台线程上进行服务器调用以将其插入后端的数据库中之后,我从服务器中检索我想要的新ID插回Core-Data。

任何人都可以推荐保存新项目并调用服务器而不会丢失ManagedObjectContext中的新项目。我想对托管对象进行编辑,而不必使用NSPredicate进行整个NSFetch再次找到它,但是现在它似乎正在消失。

这是我的代码,用于将对象本地存储在Core Data中,然后转到服务器。但是,当我回来时,我不知道如何访问这条新记录。

 NSEntityDescription *entity = [NSEntityDescription entityForName:@“Item” inManagedObjectContext:self.managedObjectContext];

        // Initialize Record
        NSManagedObject *record = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:self.managedObjectContext];

        // Populate Record
        [record setValue:name forKey:@“name”];
         // Save Record
        NSError *error = nil;

        if ([self.managedObjectContext save:&error]) {
          //code to set up background request
   [NSURLConnection sendAsynchronousRequest:rq queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *rsp, NSData *data, NSError *err) {
        if (err) {
        } else {
            NSDictionary *jsonResults = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
             NSInteger insertID = [jsonResults[@"response"][@"insert_id"] integerValue];
            self.newid = *(&(insertID));
            dispatch_async(dispatch_get_main_queue(), ^{
              //          //NEED WAY TO INSERT INTO CORE DATA WITHOUT DOING FULL BLOWN FETCH BUT RECORD SEEMS TO BE GONE
            });
        }
    }];
} 

1 个答案:

答案 0 :(得分:1)

2个选项,有点懒惰和正确'

假设这一切都源自主线程,因此record被插入到主上下文中,您只需捕获块中的record并更新它。不要在任何其他线程上对其进行任何其他更改。此外,在此操作完成之前,请不要删除它或上下文。

更好的是,从新的objectID获取record,确保它是永久ID,而不是暂时的(请参阅obtainPermanentIDsForObjects:error:)。现在,对于您正在处理的任何一个主题,您可以根据需要从适当的上下文请求objectRegisteredForID: