我有一个核心数据结构,其中联系人从服务器解析并与帐户实体相关联。创建崩溃I: 1.以用户A登录并创建联系人 2.登录与用户B和崩溃发生。核心数据NSRangeException多线程块中的崩溃
很明显,有一个空的NSArray导致这次崩溃。
所述的碰撞发生时,同时通过各服务器数据触头用performBlock的循环:
NSManagedObjectContext *mainMOC = self.managedObjectContext;
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
//NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType];
[moc setParentContext:mainMOC];
[moc setUndoManager:nil];
BCRAccount *account2 = (BCRAccount*)[moc objectWithID:[self.loggedInAccount objectID]];
//[moc performBlockAndWait:^{
[moc performBlock:^{
//parse each contact
此外,我要求在一个单独的方法中的每个接触的取请求引用子管理对象:
NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:[BCRContact entityName]];
NSManagedObjectContext *managedObjectContext = childmoc;
NSArray *fectchresult = [managedObjectContext executeFetchRequest:fetch error:&error];
我想知道这是一对多还是一对一的关系问题。第一次登录时,必须保留一些导致第二次登录崩溃的数据。
*终止应用程序由于未捕获的异常 'NSRangeException',原因是: '* - [__ NSArray0 objectAtIndex:]:指数15超越边界空的NSArray' ***第一掷调用堆栈: (0x18be921c0 0x18a8cc55c 0x18bdfd3dc 0x10024c154 0x1920301b4 0x1920303e4 0x19201d98c 0x192035448 0x191dd17e8 0x191cea220 0x18f1aa188 0x18f19ee64 0x18f19ed24 0x18f11b7ec 0x18f142c58 0x18f143678 0x18be3f7dc 0x18be3d40c 0x18be3d89c 0x18bd6c048 0x18d7f2198 0x191d582fc 0x191d53034 0x10008e578 0x18ad505b8) 的libC++ abi.dylib:与类型的未捕获的异常终止NSException
最后之前的所有这种解析发生我见th错误以及当一个单独的服务被调用时: 2016-11-11 12:22:34.660266 AtEventUniversal [2223:781261]提供给CFRunLoopRunSpecific的无效模式'kCFRunLoopCommonModes' - 断开_CFRunLoopError_RunCalledWithInvalidMode进行调试。此消息只会在每次执行时出现一次。
感谢您对这个烂摊子的任何提示。