我发布的应用程序有以下崩溃报告:
synchronizeMyWords
方法从数据库中获取实体,使用主上下文父级创建私有队列上下文,最后保存结果。所有操作都在后台线程中。每次应用程序进入background
and时都会调用此方法foreground
。这是一个简化的方法:
- (AWSTask *)synchronizeMyWords {
__weak typeof(self) weakSelf = self;
AWSContinuationBlock block = ^id _Nullable(AWSTask * _Nonnull task) {
if ([task.result isKindOfClass:[NSArray class]]) {
NSArray * records = (NSArray *)task.result;
NSManagedObjectContext * context = [NSManagedObjectContext MR_contextWithParent:[NSManagedObjectContext MR_defaultContext]];
[context performBlockAndWait:^{
for (NSDictionary * info in records) {
[RDRWord MR_createEntityInContext:context];
}
[context save:nil];
}];
return [AWSTask taskWithResult:@YES];
}
return [AWSTask taskWithError:[NSError errorWithDomain:@"" code:404 userInfo:nil]];
};
AWSExecutor * executor = [AWSExecutor defaultExecutor];
return [[self loadLocalWords] continueWithExecutor:executor withBlock:block];
}
如您所见,我正在使用Magical Record 3rd 方库来管理 Core Data 堆栈。这是创建私有队列上下文的方法:
+ (NSManagedObjectContext *) MR_contextWithParent:(NSManagedObjectContext *)parentContext
{
NSManagedObjectContext *context = [self MR_newPrivateQueueContext];
[context setParentContext:parentContext];
[context MR_obtainPermanentIDsBeforeSaving];
return context;
}
你可以在这里NSManagedObjectContext+MagicalRecord
查看github 上的整个类别。
在脱离作用域之前释放的context
内部对象如何可用?performBlockAndWait:
我个人无法重现崩溃,但我的很多用户(iOS 8.1 - 10 设备)都受到此问题的影响。
更新 1:
这是例如博客上的相同报告