【发布时间】:2014-01-07 06:19:50
【问题描述】:
给定以下代码:
+(Tag *) addNewTagwithName:(NSString *)tagName Error:(NSError **)addError {
AppDelegate *delegate = (AppDelegate *) [[UIApplication sharedApplication]delegate];
Tag *newTag = [NSEntityDescription insertNewObjectForEntityForName:@"Tag" inManagedObjectContext:delegate.managedObjectContext];
newTag.tagName = tagName;
//no error save to parse
PFObject *tag = [PFObject objectWithClassName:@"Tag"];
tag[@"tagName"] = newTag.tagName;
[tag saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if(error) {
*addError = error;
} else {
dispatch_async(dispatch_get_main_queue(), ^{
NSError *error = nil;
newTag.tagId = tag.objectId;
if(![delegate.managedObjectContext save:&error]) {
*addError = error;
}
});
}
}];
return newTag;
}
有哪些方法可以确保只在执行 newTag.tagId = tag.objectId 之后才返回 newTag?
【问题讨论】:
-
你能不能谈谈
saveInBackgroundWithBlock?Core Data 中的线程安全问题。 -
您以异步方式和后台保存有什么原因吗?
标签: ios objective-c core-data objective-c-blocks