Objective c 目标C仅在方法范围内更改对象
我正在制作一个聊天应用程序,当用户成功登录聊天时,服务器会回复当时在线的用户。该字符串(服务器发送一个字符串)转换为NSMutableArray,然后存储到名为Objective c 目标C仅在方法范围内更改对象,objective-c,nsmutablearray,Objective C,Nsmutablearray,我正在制作一个聊天应用程序,当用户成功登录聊天时,服务器会回复当时在线的用户。该字符串(服务器发送一个字符串)转换为NSMutableArray,然后存储到名为tableData的NSMutableArray中,该NSMutableArray是NSTableView的数据源。当在线人员存储到tableData中时,NSLog输出显示tableData已填充。但是,当该方法完成且登录视图关闭时,调试器中的tableData会显示0对象,而NSTableView不会填充,这通常是这样的。以下是我的方
tableData
的NSMutableArray中,该NSMutableArray是NSTableView的数据源。当在线人员存储到tableData
中时,NSLog输出显示tableData
已填充。但是,当该方法完成且登录视图关闭时,调试器中的tableData
会显示0对象
,而NSTableView不会填充,这通常是这样的。以下是我的方法(一个调用另一个):
以下是我打开和关闭登录视图的方法:
- (IBAction)loginToChat:(id)sender {
NSLog(@"Called");
if (self.loginPopover == nil) {
NSLog(@"Login Popover is nil");
self.loginPopover = [[NSPopover alloc] init];
self.loginPopover.contentViewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
}
if (!self.loginPopover.isShown) {
NSLog(@"Login Popover is opening");
[self.loginButton setTitle:@"Cancel"];
[self.settingsButton setEnabled:NO];
[self.send setEnabled:NO];
[self.message setEnabled:NO];
[self.loginPopover showRelativeToRect:self.loginButton.frame ofView:self.view preferredEdge:NSMinYEdge];
}
else {
NSLog(@"Login Popover is closing");
if (self.isLoggedIn) {
[self.loginButton setTitle:@"Logout"];
}
else {
[self.loginButton setTitle:@"Login"];
}
[self.settingsButton setEnabled:YES];
[self.send setEnabled:YES];
[self.message setEnabled:YES];
[self.loginPopover close];
}
}
任何帮助都将不胜感激,因为我有这个项目的最后期限。而不是
self.tableData = [NSMutableArray arrayWithArray:newTableData];
你能试试吗
self.tableData = [newTableData copy];
我能想到的唯一一件事是——tableData是一个强大的属性吗 之后
self.tableData = [NSMutableArray arrayWithArray:newTableData];
编写以下代码段:
[self setTableData:tableData]
那么,您创建了多少个不同的类实例?哪个类@hotlicks这些都是nsviewcontroller的一部分的类。请检查您的代码以确保您没有执行类似于
self.tableData=[NSMutableArray]
或[self.tableData removeAllObjects]
的操作。还有可能getPeople:
被多次调用(使用nil
或空字符串参数)?“拥有”您的问题数组的类。是的,它是一个强属性(强,非原子)
您是否尝试更改新的表数据副本?它是否说“数据:0对象”?它说的是\u tableData=(\u NSArrayM*)@“0对象
是调试器。有时候,它的味道很甜。可以在lldb控制台中设置断点并键入p tableData吗。count@insert此处的名称您是否能够使用上述代码段打印数组?它成功更改了该范围的数组,但在该方法结束且loginview关闭后,它仍不工作
[self setTableData:tableData]