我有一个基于核心数据的应用程序,它有一个对象(列表)到许多对象(列表项)关系.我正在设备之间同步数据,作为其中一部分,我从后台线程中的XML文件导入列表(通过NSOperation子类).
当我更新现有列表时,我删除了所有旧列表项(来自特定于该线程的NSManagedObjectContext)并将其替换为XML文件中的新列表...删除是通过枚举项目来处理的列表:
for (ListItemCD *item in listToUpdate.listItems) {
[self.importContext deleteObject:item];
}
Run Code Online (Sandbox Code Playgroud)
但是,有一段时间,我在枚举期间遇到了崩溃:
*由于未捕获的异常'NSGenericException'而终止应用程序,原因:'* Collection <_NSFaultingMutableSet:0x4fcfcb0>在枚举时发生了变异.
我不知道从哪里开始寻找问题的原因.在枚举发生时,我不会修改代码的任何其他部分中的列表.可以同时存在多个线程,因为导入/更新了不同的列表...将在另一个线程中保存上下文导致问题 - 因为它还通知主要上下文(如果它与枚举同时发生) ?
如果它有帮助,这里是来自我的NSOperation子类的"main"函数的代码(我从Core Data中删除旧的列表项,并通过解析XML数据来更新列表):
- (void)main {
// input the xml data into GDataXML
NSData *xmlData = [[NSMutableData alloc] initWithContentsOfFile:self.filePath];
NSError *error;
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData options:0 error:&error];
// get the list name (so that I know which list to update)
NSString *listName;
NSArray *listNames = [doc.rootElement elementsForName:@"listName"];
if (listNames.count > 0) {
GDataXMLElement *listNameElement = (GDataXMLElement *) [listNames objectAtIndex:0];
listName …Run Code Online (Sandbox Code Playgroud) CoreData一个一对多默认生成NSSet,如何改变NSSet对NSMutableArray我尝试手动改变它,但得到的错误?
_NSFaultingMutableSet filteredArrayUsingPredicate:]: unrecognized selector sent to instance 0x1ed35e40'
Run Code Online (Sandbox Code Playgroud)