Objective c NSArray在更改时会丢失一个值

Objective c NSArray在更改时会丢失一个值,objective-c,nsmutablearray,Objective C,Nsmutablearray,我试图在Mac应用程序中做一些非常简单的事情,但遇到了一个令人沮丧的问题 我有一个包含5项的NSPoupButton、一个NSTextView和一个包含5个字符串的NSMutableArray。更改popupbutton选择时,相应的字符串将显示在文本视图中。当文本视图文本更改时,数组中相应的字符串也会更改 一些代码: 在初始化代码中: self.array = [NSMutableArray arrayWithObjects:@"string 1", @"string 2", @"string

我试图在Mac应用程序中做一些非常简单的事情,但遇到了一个令人沮丧的问题

我有一个包含5项的NSPoupButton、一个NSTextView和一个包含5个字符串的NSMutableArray。更改popupbutton选择时,相应的字符串将显示在文本视图中。当文本视图文本更改时,数组中相应的字符串也会更改

一些代码:

在初始化代码中:

self.array = [NSMutableArray arrayWithObjects:@"string 1", @"string 2", @"string 3", @"string 4", @"string 5", nil];
鉴于主体:

-(void)popUpChanged:(id)sender {
    NSInteger index = [sender indexOfSelectedItem];

    NSString *string = [self.array objectAtIndex:index];
    self.textView.string = string;
    NSLog(@"Selected string: %@", string);
}

-(void)textDidChange:(NSNotification *)notification {
    NSInteger selectedSegment = self.popUp.indexOfSelectedItem;
    NSText *newText = notification.object;
    [self.array replaceObjectAtIndex:selectedSegment withObject:newText.string];
    NSLog(@"New string: %@", newText.string);
}
问题: 选择弹出项0时,“字符串1”显示在文本视图中

TextView更改为“字符串100”

选择弹出项4,“字符串5”显示在文本视图中

再次选择弹出项目0。TextView显示“字符串5”,但应显示“字符串100”

(NSLogs显示字符串在
textDidChange:
中已正确更改,但在
popUpChanged:
中已更改为“字符串5”)


发生了什么?

有关
NSText
string
方法状态的文档(重点添加):

出于性能原因,此方法返回文本对象的当前备份存储。如果希望在操作文本存储时维护此快照,则应创建相应子字符串的副本

这意味着您放置在数组中的对象会不断更新并跟踪文本视图的内容

尝试:


听起来好像replaceObjectAtIndex不起作用。数组是带有retain的属性吗?另外,检查textDidChange结尾的数组内容。太棒了!就是这样,我永远也找不到。谢谢
[self.array replaceObjectAtIndex:selectedSegment withObject:newText.string.copy];