gpt4 book ai didi

cocoa - Core Data 和 NSArrayController 的行为非常奇怪

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

我有一个基于文档的应用程序,由 Core Data 提供支持,并具有内存存储。我有一个由 NSArrayController 支持的表,该表应该列出 Buffer 类型的所有模型对象。我的 UI 还包括一个 NSTextView,它从当前选定的 Buffer 对象中获取数据。

我尝试这样填充 TextView (我正在使用 Fragaria):

- (void)tableViewSelectionDidChange:(NSNotification *)aNotification
{
if ([aNotification object] == editorList) {
Buffer *buffer = [[editorListArrayController selectedObjects] objectAtIndex:0];
[fragaria setString:[buffer valueForKey:@"content"]];
}
}

现在,每当用户在 TextView 中键入内容时,我都会将其保存到当前选定的缓冲区中,然后将更改保存到托管对象上下文中:

- (void)textDidChange:(NSNotification *)notification
{
Buffer *buffer = [[editorListArrayController selectedObjects] objectAtIndex:0];
[buffer setValue:[fragaria string] forKey:@"content"];
[[self managedObjectContext] saveChanges];
[self setEditedFlagForModelAndWindow:YES];
}

我的问题是,当我列出 NSArrayController 中的所有模型对象时,它们似乎都具有相同的 @"content"值,这意味着相同的值以某种方式被写入所有模型对象。我该如何调试这个?

最佳答案

幸运的是,我前段时间遇到了完全相同的问题。

问题是你的作业:

[buffer setValue:[fragaria string] forKey:@"content"];

[fragaria string] 返回指向可变字符串的指针。 NSTextView 中的每次编辑都会更新相同的 NSMutableString 对象,从而导致所有 Buffer 对象在没有通知的情况下被更改。

以下代码有效:

NSString *result = [NSString stringWithFormat:@"%@", [fragaria string]];
[buffer setValue:result forKey:@"content"];

此外 [NSString stringWithString:] 就足够了,但我还没有检查这一点。

关于cocoa - Core Data 和 NSArrayController 的行为非常奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6090138/

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