gpt4 book ai didi

iphone - 为什么在 iPad 上删除后需要 CoreData forceFetch 而在 iPhone 上则不需要?

转载 作者:行者123 更新时间:2023-12-03 18:39:37 25 4
gpt4 key购买 nike

当以下代码在 iPhone (ios 3.1) 上运行时,删除后获取的对象数比删除前少 1。但在 iPad (ios 3.2) 上,计数保持不变。这种不一致导致了 iPad 上的崩溃,因为代码中的其他地方在删除后不久就会调用 fetchedObjects,并且调用代码会信任计数,尝试访问刚刚删除的对象的属性,从而导致 NSObjectInaccessibleException 错误(见下文) )。解决方法是使用对performFetch 的注释掉调用,该调用在执行时会使对fetchObjects 的第二次调用产生与没有它的iPhone 上相同的结果。我的问题是:为什么 iPad 产生的结果与 iPhone 不同?这是我最近发现并发布的第二个差异。

-(NSError*)deleteObject:(NSManagedObject*)mo;
{
NSLog(@"\n\nNum objects in store before delete: %i\n\n",
[[self.fetchedResultsController fetchedObjects] count]);

[self.managedObjectContext deleteObject:mo];

// Save the context.
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
}

// [self.fetchedResultsController performFetch:&error]; // force a fetch

NSLog(@"\n\nNum objects in store after delete (and save): %i\n\n",
[[self.fetchedResultsController fetchedObjects] count]);

return error;
}

(完整的 NSObjectInaccessibleException 是:“由于未捕获的异常“NSObjectInaccessibleException”而终止应用程序,原因:“CoreData 无法满足“0x1dcf90”的错误

最佳答案

将以下代码添加到您的 FRC 委托(delegate)即可解决此问题。

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { }

感谢 Apple Dev 论坛上的 BenT 提供的答案(请参阅上面我的评论)。我向他询问修复的原因,他说:“iPad 使用 iPhoneOS 3.2,而 iPhone 3.1。3.2 中对 NSFetchedResultsController 进行了许多改进,但不幸的是,这对代表们的实际要求产生了副作用。实现一种(任何一种)委托(delegate)方法来获取主动变更跟踪。” https://devforums.apple.com/message/221471#221471 (希望这对某人有帮助。常见问题解答说在这种情况下回答你自己的问题是可以的)

关于iphone - 为什么在 iPad 上删除后需要 CoreData forceFetch 而在 iPhone 上则不需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2859301/

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