Objective c 目标C仅在方法范围内更改对象

Objective c 目标C仅在方法范围内更改对象,objective-c,nsmutablearray,Objective C,Nsmutablearray,我正在制作一个聊天应用程序,当用户成功登录聊天时,服务器会回复当时在线的用户。该字符串(服务器发送一个字符串)转换为NSMutableArray,然后存储到名为tableData的NSMutableArray中,该NSMutableArray是NSTableView的数据源。当在线人员存储到tableData中时,NSLog输出显示tableData已填充。但是,当该方法完成且登录视图关闭时,调试器中的tableData会显示0对象,而NSTableView不会填充,这通常是这样的。以下是我的方

我正在制作一个聊天应用程序,当用户成功登录聊天时,服务器会回复当时在线的用户。该字符串(服务器发送一个字符串)转换为NSMutableArray,然后存储到名为
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]