如何saveWithBlock通过实体完成块
问题描述:
我知道MagicalRecord
将在后台线程中执行saveWithBlock
并在主线程中执行completion
,只是弄不清楚如何在saveWithBlock通过实体完成块,具体是:如何saveWithBlock通过实体完成块
Event *wantToCreateEvent = nil;
Event *wantToUpdateEvent = toBeUpdatedEvent;
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext){
wantToCreateEvent = [Event MR_createEntityInContext:localContext];
Event *localContextEvent = [wantToUpdateEvent MR_inContext:localContext];
localContextEvent.attri = @"newValue"
} completion:^(BOOL success, NSError *error) {
// Can I use wantToCreateEvent directly here?
// Is wantToUpdateEvent updated here?
}
答
对于实体的创建可以使用Megical记录的2个功能
+ (id) MR_createEntityInContext:(NSManagedObjectContext *)context;
+ (id) MR_createEntity;
注:保存的实体,您只需要保存在这些实体创建
保存在Context背景
+ (void) saveWithBlock:(void(^)(NSManagedObjectContext *localContext))block;
+ (void) saveWithBlock:(void(^)(NSManagedObjectContext *localContext))block completion:(MRSaveCompletionHandler)completion;
保存在主线程
+ (void) saveWithBlockAndWait:(void(^)(NSManagedObjectContext *localContext))block;
有关CoreData的再认识有了MegicalRecord我建议你去通过本教程
答
如果需要在块中修改它们,请在变量上使用__block存储类型修饰符。
__block Event *wantToCreateEvent = nil;
__block Event *wantToUpdateEvent = toBeUpdatedEvent;
根据苹果的文档中发现here:
使用__block变量共享存储
如果您需要能够捕获变量的值从块内改变,你可以在原始变量声明上使用__block存储类型修饰符。这意味着变量存在于原始变量的词法范围和在该范围内声明的任何块之间共享的存储中。