我正在制作聊天应用程序,当此人成功登录聊天时,服务器会回复当时在线的人。该字符串(服务器发送字符串)转换为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];
}
}
我非常感谢任何帮助,因为我有这个项目的截止日期。
答案 0 :(得分:0)
而不是
self.tableData = [NSMutableArray arrayWithArray:newTableData];
你可以尝试吗?
self.tableData = [newTableData copy];
我唯一能想到的是 - tableData是一个强大的属性吗?
答案 1 :(得分:0)
在此之后
self.tableData = [NSMutableArray arrayWithArray:newTableData];
写下这个片段:
[self setTableData:tableData]