gpt4 book ai didi

iphone - for 循环随机卡在 executeFetchRequest :error:

转载 作者:可可西里 更新时间:2023-11-01 17:02:38 24 4
gpt4 key购买 nike

我最近在使用我的 iOS 应用程序时遇到了一个奇怪的问题,并且不知道如何解决它。

在第一次运行期间,有一个在后台运行的方法,它从游戏中下载项目列表和项目属性,并将其存储在 Core Data 中以供以后的关系使用。处理项目的导入方法部分如下所示:

NSManagedObject *item;
for (TFSchemaItem *tfItem in [bs items]) {
item = [NSEntityDescription insertNewObjectForEntityForName:@"SchemaItem" inManagedObjectContext:managedObjectContext_];

NSLog(@"%@", [tfItem itemName]);

[item setValue:[tfItem itemName] forKey:@"itemName"];
[item setValue:[NSNumber numberWithInteger:[tfItem defindex]] forKey:@"defindex"];
[item setValue:[tfItem itemClass] forKey:@"itemClass"];
[item setValue:[tfItem type] forKey:@"itemType"];
[item setValue:[tfItem name] forKey:@"tfName"];
[item setValue:[NSNumber numberWithInteger:[tfItem slot]] forKey:@"itemSlot"];
[item setValue:[NSNumber numberWithInteger:[tfItem quality]] forKey:@"itemQuality"];
[item setValue:[[tfItem imageURL] absoluteString] forKey:@"imageURL"];
[item setValue:[[tfItem largeImageURL] absoluteString] forKey:@"largeImageURL"];
[item setValue:[NSNumber numberWithInteger:[tfItem craftClass]] forKey:@"craftClass"];
[item setValue:[tfItem itemDescription] forKey:@"tfDescription"];
[item setValue:[NSNumber numberWithBool:[tfItem properName]] forKey:@"properName"];

NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
NSMutableArray *attrArray = [[NSMutableArray alloc] init];

for (TFItemAttribute *attr in [tfItem attributes]) {
[attrArray addObject:[NSNumber numberWithInt:[attr defindex]]];
}

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"defindex IN %@", attrArray];
[attrArray release];

[fetch setEntity:[NSEntityDescription entityForName:@"Attribute" inManagedObjectContext:managedObjectContext_]];
[fetch setPredicate:predicate];
[fetch setReturnsObjectsAsFaults:NO];

NSLog(@"1");
NSArray *fetchArray = [managedObjectContext_ executeFetchRequest:fetch error:nil];
NSLog(@"2");

[item setValue:[NSSet setWithArray:fetchArray] forKey:@"attributes"];
...
}

在此之前是另一个循环,除了处理 SchemaItem 上的 Attribute 实体并且不需要自己创建任何关系之外,它是相同的,它运行良好。

这个循环的问题是,在随机时间循环会卡在 [managedObjectContext_executeFetchRequest:fetch error:nil],我会在控制台中得到记录的“1”,但不是紧随其后的是“2”。不过,奇怪的是,有时循环会成功运行,没有问题。

虽然循环运行良好有时有点不错,但它让我无法知道是什么导致它每隔一段时间卡在executeFetchRequest:error: .

这里有人能看到我遗漏的东西吗?我的头已经用它炸了 2 天了。

最佳答案

挂了,是吧?

听起来像是并发问题;你的锁嵌套错误。当它挂起时,进入调试器(按下暂停按钮)并查看所有线程的回溯。更有可能的是,您会发现锁上有两个(或更多)线程。

正如 Daniel T 所建议的,您必须阅读 Core Data concurrency guide .

一个常见的错误是认为只读操作是自动线程安全的。

关于iphone - for 循环随机卡在 executeFetchRequest :error:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5372414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com