gpt4 book ai didi

cocoa - 保存后核心数据有什么变化?

转载 作者:行者123 更新时间:2023-12-03 18:05:52 29 4
gpt4 key购买 nike

我有一个基于 Core Data 的 Mac 应用程序,在我保存文件之前该应用程序运行良好。当我保存文件时,核心数据似乎发生了一些变化,因为我原来的获取请求不再获取任何内容。这是在保存之前有效的提取请求,但在保存后返回一个空数组。

NSEntityDescription *outputCellEntityDescription = [NSEntityDescription entityForName:@"OutputCell" 
inManagedObjectContext:[[self document] managedObjectContext]];
NSFetchRequest *outputCellRequest = [[[NSFetchRequest alloc] init] autorelease];
[outputCellRequest setEntity:outputCellEntityDescription];
NSPredicate *outputCellPredicate = [NSPredicate predicateWithFormat:@"(cellTitle = %@)", outputCellTitle];
[outputCellRequest setPredicate:outputCellPredicate];
NSError *outputCellError = nil;
NSArray *outputCellArray = [[[self document] managedObjectContext] executeFetchRequest:outputCellRequest
error:&outputCellError];

我已经检查了[[[self document] ManagedObjectContext] RegisteredObjects],发现保存后该对象仍然存在,并且似乎没有任何变化并且该对象仍然存在。这可能是相当基本的事情,但有人知道我可能做错了什么吗?如果没有,任何人都可以给我任何指示,说明保存后核心数据模型中可能有什么不同,这样我可能会知道为什么提取请求在保存后停止工作?

编辑

据我所知,在一次扑救后似乎关系破裂了。如果我省略为请求设置谓词的行,则请求将返回数组中的对象。我已经检查了注册对象,看起来关系完好无损,但是如果我执行诸如保存文件之类的操作,重新打开它,然后检查注册对象,关系将设置为 nil。我已将保存文件打开为 xml 文件,并且首次保存该文件时关系似乎完好无损。

我添加了核心数据模型关系被破坏的部分的屏幕截图。有谁知道为什么在核心数据中保存文件可能会破坏关系?作为引用,我使用内置于核心数据中的默认保存实现,因此没有自定义保存代码。

http://emberapp.com/splash6/images/littlesnapper/sizes/m.png

编辑

我没有在引起此问题时触发的 -awakeFromFetch: 方法。

我使用 KVO 的核心食谱模型对一些问题对象进行了子类化 NSManagedObject:

    +(void)initialize
{
if (self == [OutputCell class])
{
NSArray *nameKeys = [NSArray arrayWithObjects:@"cell", @"sheet", @"table", nil];
[self setKeys:nameKeys
triggerChangeNotificationsForDependentKey:@"cellTitle"];

NSArray *measuresKeys = [NSArray arrayWithObjects:@"fivePercentile", @"maximum", @"mean", @"median",@"minimum",@"ninetyFivePercentile",@"standardDeviation",nil];
[self setKeys:measuresKeys
triggerChangeNotificationsForDependentKey:@"analysisResults"];
}
}

此方法似乎不会在保存期间或保存后触发,因此似乎不是导致问题的原因。我目前正在检查代码中的所有其他方法,以查找它们中的任何一个是否在保存期间或之后碰巧被调用。

编辑

根据下面 Marcus 的建议,我设法在保存模型之前使获取请求失败。我现在的问题是失败时控制台中返回的消息:

HIToolbox: ignoring exception '+entityForName: could not locate an NSManagedObjectModel for entity name 'OutputCell'' that raised inside Carbon event dispatch

此调用后将记录控制台消息:

NSEntityDescription *outputCellEntityDescription = [NSEntityDescription entityForName:@"OutputCell" 
inManagedObjectContext:[[self document] managedObjectContext]];

控制台消息中 OutputCell 后面是否应该有额外的 ' ?物体通常是否有这个额外的 ',或者它来自某个地方?如果它来自某个地方并导致获取请求失败,是否有人有任何好主意,它可能来自哪里或者我如何追踪它的来源?

最佳答案

听起来你在某个地方将某些东西设置为 nil 并导致你返回 nil。我会在调试器中遍历您的保存和获取代码,并在您不期望的情况下查找被设置为 nil 的对象。

更新

任何地方是否有任何可以操纵关系的代码?也许 -awakeFromFetch: 中的某些内容导致关系损坏?

如果他们第一次正确保存然后失败,那么真正表明代码中的某些内容破坏了这些关系。您是否为这些对象创建 NSManagedObject 子类?如果是这样,您是否会尝试重写 -init... 方法?

更新

最后一个勾号绝对不应该在那里。检查您的获取请求,这可能都归结为某处字符串中的简单拼写错误...

关于cocoa - 保存后核心数据有什么变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2467921/

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