Objective c NSArray在更改时会丢失一个值
我试图在Mac应用程序中做一些非常简单的事情,但遇到了一个令人沮丧的问题 我有一个包含5项的NSPoupButton、一个NSTextView和一个包含5个字符串的NSMutableArray。更改popupbutton选择时,相应的字符串将显示在文本视图中。当文本视图文本更改时,数组中相应的字符串也会更改 一些代码: 在初始化代码中: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
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];