Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 集合在使用coredata和多线程枚举时发生了变异_Objective C_Ios_Multithreading_Ipad_Core Data - Fatal编程技术网

Objective c 集合在使用coredata和多线程枚举时发生了变异

Objective c 集合在使用coredata和多线程枚举时发生了变异,objective-c,ios,multithreading,ipad,core-data,Objective C,Ios,Multithreading,Ipad,Core Data,我正在调试一个ipad应用程序,我刚刚从其他开发者那里继承了这个应用程序。目前,我得到了一个非常奇怪的错误,我不知道如何攻击 应用程序因以下错误而死亡: *由于未捕获的异常“NSGenericeException”而终止应用程序,原因:“*集合在枚举时发生了变异。” 当我执行po 0xc5d2b40时,它告诉我它是一个特定对象类型的数组。但是,当我在所有异常中打开断点并进行回溯时,没有迹象表明此对象类型的数组被枚举或变异 我看到一些参考资料表明这可能与coredata和多线程有关,但我想知道是否

我正在调试一个ipad应用程序,我刚刚从其他开发者那里继承了这个应用程序。目前,我得到了一个非常奇怪的错误,我不知道如何攻击

应用程序因以下错误而死亡: *由于未捕获的异常“NSGenericeException”而终止应用程序,原因:“*集合在枚举时发生了变异。”

当我执行po 0xc5d2b40时,它告诉我它是一个特定对象类型的数组。但是,当我在所有异常中打开断点并进行回溯时,没有迹象表明此对象类型的数组被枚举或变异

我看到一些参考资料表明这可能与coredata和多线程有关,但我想知道是否有人对如何解决这个问题有任何建议。我还应该注意:我只在设备上得到这个错误,而不是在模拟器上

提前谢谢

注意:当应用程序从objc_exception_抛出命中断点时,使用bt命令,我从各种后台线程获得以下结果:

大多数线程如下所示: tid=0x2c03,0x307e9cd4 libsystem\u kernel.dylib
\uuuuuwq\ukernel+8
帧0:0x307e9cd4 libsystem\u kernel.dylib
帧#1:0x32d35f3c libsystem_c.dylib
_pthread_wqthread+616
帧#2:0x32d35cd0 libsystem_c.dylib
start_wqthread+8

我有一个线程正在AFURLConnectionOperation(外部库:AFNetworking)中运行一个方法

回溯中有一个线程和我的代码,这就是我上面提到的。我对调试器有点陌生,在检查回溯时是否有可能出错

执行我的所有代码的线程上的回溯如下所示:

tid = 0x2003, 0x32d2fcac libsystem_c.dylib`OSSpinLockLock$VARIANT$wfe + 84
frame #0: 0x32d2fcac libsystem_c.dylib`OSSpinLockLock$VARIANT$wfe + 84
frame #1: 0x32eb7c88 libobjc.A.dylib`_objc_rootReleaseWasZero_slow + 28
frame #2: 0x32eb5210 libobjc.A.dylib`_objc_rootReleaseWasZero + 132
frame #3: 0x32eb515c libobjc.A.dylib`_objc_rootRelease + 12
frame #4: 0x31ba6b0a CoreData`-[NSSQLIntermediate _generateSQLForKeyPathExpression:allowToMany:inContext:] + 278
frame #5: 0x31ba687a CoreData`-[NSSQLIntermediate _generateSQLForExpression:allowToMany:inContext:] + 186
frame #6: 0x31babea4 CoreData`-[NSSQLSimpleWhereIntermediate _generateSQLType2InContext:] + 660
frame #7: 0x31ba6260 CoreData`-[NSSQLSimpleWhereIntermediate generateSQLStringInContext:] + 400
frame #8: 0x31bbbd06 CoreData`-[NSSQLCompoundWhereIntermediate _generateMulticlauseStringInContext:] + 174
frame #9: 0x31bbba84 CoreData`-[NSSQLCompoundWhereIntermediate generateSQLStringInContext:] + 272
frame #10: 0x31ba5d1a CoreData`-[NSSQLFetchIntermediate generateSQLStringInContext:] + 90
frame #11: 0x31ba24d0 CoreData`-[NSSQLGenerator newSQLStatementForFetchRequest:ignoreInheritance:countOnly:nestingLevel:] + 460
frame #12: 0x31ba2212 CoreData`-[NSSQLAdapter _newSelectStatementWithFetchRequest:ignoreInheritance:] + 414
frame #13: 0x31ba1e6c CoreData`-[NSSQLCore newRowsForFetchPlan:] + 144
frame #14: 0x31ba152e CoreData`-[NSSQLCore objectsForFetchRequest:inContext:] + 698
frame #15: 0x31ba0fc6 CoreData`-[NSSQLCore executeRequest:withContext:error:] + 282
frame #16: 0x31ba0464 CoreData`-[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 1432
frame #17: 0x31b9ec28 CoreData`-[NSManagedObjectContext executeFetchRequest:error:] + 604
frame #18: 0x00052956 digidrill`-[DigidrillIncrementalCache executeFetchRequest:allNewerThanOrFailure:] + 410 at DigidrillIncrementalCache.m:80
frame #19: 0x0003fbae digidrill`-[DigidrillIncrementalStore(Responders) immutableCacheListResponderBegin:intoArray:inContext:outErr:] + 434 at DigidrillIncrementalStore+Responders.m:253
frame #20: 0x00015ea4 digidrill`-[DigidrillIncrementalStore executeRequest:withContext:error:] + 3836 at DigidrillIncrementalStore.m:157
frame #21: 0x31ba0464 CoreData`-[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 1432
frame #22: 0x31b9ec28 CoreData`-[NSManagedObjectContext executeFetchRequest:error:] + 604
frame #23: 0x00018534 digidrill`+[CoreDataExtractor executeSyncFetchRequest:callback:onDispatchQueue:] + 704 at CoreDataExtractor.m:175
frame #24: 0x0001a9a2 digidrill`+[CoreDataExtractor ensureGammaDataExistsForTrack:maxOld:flags:outErr:] + 1234 at CoreDataExtractor.m:363
frame #25: 0x00058670 digidrill`-[XYGraph dataForTrackPlot:] + 632 at XYGraph.m:230
frame #26: 0x0006f7d6 digidrill`__23-[TrackPlot reloadData]_block_invoke_0 + 66 at TrackPlot.m:49
frame #27: 0x344b0c58 libdispatch.dylib`_dispatch_call_block_and_release + 12
frame #28: 0x344b2d0e libdispatch.dylib`_dispatch_queue_drain + 274
frame #29: 0x344b2b74 libdispatch.dylib`_dispatch_queue_invoke$VARIANT$mp + 40
frame #30: 0x344b37e6 libdispatch.dylib`_dispatch_worker_thread2 + 210
frame #31: 0x32d35dfa libsystem_c.dylib`_pthread_wqthread + 294
frame #32: 0x32d35cd0 libsystem_c.dylib`start_wqthread + 8

这家伙有一个很好的解释帮我解决了这个问题:


基本上,MO上下文只能由创建它的线程使用。

您是否跟踪了所有线程的回溯?错误声称它是一个集合而不是一个数组,这表明它可能与“对多”关系有关。因为它只发生在设备上,我怀疑有线程问题。可能一个线程正在枚举关系中的对象,而另一个线程正在更新它们。NSManagedObject不是线程安全的,因此这是一个重大错误。您能否确定应用程序中的其他线程如何访问托管对象/托管对象上下文并告诉我们更多信息?因此,在抛出objc_异常时,我尝试对每个线程进行backback,似乎其他活动线程当时都没有运行我的代码。我将编辑中其他线程的bt命令结果添加到了主帖子中。你有一个异常断点是吗?发生这种情况时,代码的堆栈跟踪是什么?