相关疑难解决方法(0)

核心数据/ NSOperation:枚举和删除对象时崩溃

我有一个基于核心数据的应用程序,它有一个对象(列表)到许多对象(列表项)关系.我正在设备之间同步数据,作为其中一部分,我从后台线程中的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)

core-data nsoperation fast-enumeration ios

8
推荐指数
1
解决办法
6572
查看次数

coredata如何将默认NSSet更改为NSMutableArray

CoreData一个一对多默认生成NSSet,如何改变NSSetNSMutableArray我尝试手动改变它,但得到的错误?

 _NSFaultingMutableSet filteredArrayUsingPredicate:]: unrecognized selector sent to instance 0x1ed35e40'
Run Code Online (Sandbox Code Playgroud)

iphone core-data

3
推荐指数
1
解决办法
3788
查看次数

标签 统计

core-data ×2

fast-enumeration ×1

ios ×1

iphone ×1

nsoperation ×1