gpt4 book ai didi

ios - 核心数据故障挫折

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:48:56 25 4
gpt4 key购买 nike

在 View Controller (选项卡 1)中,我像这样从核心数据加载:

- (void)loadRecordsFromCoreData {

[self.managedObjectContext performBlockAndWait:^{
NSError *error = nil;
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Item"];
[request setSortDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"order" ascending:YES]]];

self.items = [self.managedObjectContext executeFetchRequest:request error:&error];

}];
}

然后我像这样显示项目(在 viewDidAppear 中):

- (void)displayItems
{
for(UIView *subview in [self.itemRow subviews]) {
[subview removeFromSuperview];
}

int xPos = kXItemOffsetIphone;

for (Item *item in self.items) {
ItemView *itemView = [[ItemView alloc] initWithFrame:CGRectMake(xPos, kYItemOffsetIphone, kItemWidthIphone, kItemHeightIphone) ];

[itemView layoutWithData:item];

[self.itemRow addSubview:itemView];

xPos += kXItemSpacingIphone;
}

}

ItemView 是 UIView 的子类,显示与项目关联的图像等。当我第一次运行该应用程序时,会显示所有项目。但是,如果我单击另一个选项卡,然后返回到选项卡 1,我的所有项目都会消失。项目数组仍然存在,但数组中的每个项目都是一个“错误”,因此不会显示任何内容。非常令人沮丧。如何防止这些项目成为“故障”?

最佳答案

听起来您的 NSManagedObjectContext 正在被释放(也许您的 View Controller 正在卸载/在您切换选项卡时自行清理?)。

在幕后,您的对象只是数据进出 SQLite 存储以及在 NSManagedObjectContext 管理的缓存之间移动的代理。当上下文被解除分配时,代理对象仍然存在(因此你的数组仍然充满对象)但是它们无法向解除分配的托管对象上下文请求数据并且它们的所有值都恢复为错误。

您有几个选择:

您可以在 Controller 之间移动时传递对 NSManagedObjectContext 的引用,这样您就不会丢失它。

您可以在 -viewWillAppear: 中重新获取您的数据,或者在每次显示您的 View 时触发您认为方便的其他方法。

您还可以将 NSManagedObjectContext 移动到在应用程序的生命周期内存在的单例对象,但是如果您不小心,它可能会变得脆弱。

关于ios - 核心数据故障挫折,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12379462/

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