目标C对象仅在方法范围中更改

时间:2013-10-17 00:47:48

标签: objective-c nsmutablearray

我正在制作聊天应用程序,当此人成功登录聊天时,服务器会回复当时在线的人。该字符串(服务器发送字符串)转换为NSMutableArray,然后存储到名为tableData的NSMutableArray中,该文件是NSTableView的数据源。当在线人员存储到tableData时,NSLog输出显示tableData已填满。但是,当该方法完成并且登录视图关闭时,在调试器tableData中显示0 Objects,并且NSTableView不会填充,这通常是这样做的。这是我的方法(一个叫另一个):

- (void)getPeople:(NSString *)outputMessage
{
    NSArray *newTableData = [outputMessage componentsSeparatedByString:@";"];
    self.tableData = [NSMutableArray arrayWithArray:newTableData];
    //[self.tableData removeObjectAtIndex:0];;
    NSLog(@"Data: %@", self.tableData);
    [self.people reloadData];
}

- (void)accessGrantedWithOnlineUsers:(NSString *)users
{
    NSLog(@"Access Granted");
    self.isLoggedIn = YES;
    [self.loginButton setTitle:@"Logout"];
    [self getPeople:users];
}

以下是我打开和关闭登录视图的方法:

- (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];
    }
}

我非常感谢任何帮助,因为我有这个项目的截止日期。

2 个答案:

答案 0 :(得分:0)

而不是

self.tableData = [NSMutableArray arrayWithArray:newTableData];
你可以尝试

吗?
self.tableData = [newTableData copy];

我唯一能想到的是 - tableData是一个强大的属性吗?

答案 1 :(得分:0)

在此之后

self.tableData = [NSMutableArray arrayWithArray:newTableData];

写下这个片段:

[self setTableData:tableData]