2013-10-17 36 views
2

我正在製作一個聊天應用程序,並且當該人成功登錄到聊天時,服務器會回覆當時在線的人。該字符串(服務器發送一個字符串)被轉換爲NSMutableArray,然後將其存儲到名爲tableData的NSMutableArray中,該數據是NSTableView的數據源。當在線人存儲到tableData時,NSLog輸出顯示tableData已填滿。但是,當該方法完成並且登錄視圖關閉時,在調試器tableData中說0 Objects,並且NSTableView不會填充,通常情況下它會這樣。這裏是我的方法(一個調用另一個):Objective C只能在方法範圍內更改對象

- (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

@HotLicks屬於哪一類 – jamespick

+0

這些都屬於哪一類是nsviewcontroller。 – jamespick

回答

0

而不是

self.tableData = [NSMutableArray arrayWithArray:newTableData]; 

你可以嘗試

self.tableData = [newTableData copy]; 

我能想到的是唯一的事情 - 就是資料表強大的屬性?

+0

是的,它是一個強大的屬性'(強,非原子)' – jamespick

+0

您是否嘗試更改newTableData副本? –

+0

我試過了,它仍然說0個對象。 – jamespick

0

self.tableData = [NSMutableArray arrayWithArray:newTableData]; 

後寫這個片段:

[self setTableData:tableData] 
+0

@insert Name這裏你可以使用上面的代碼片段打印數組? –

+0

它成功地更改了該範圍的數組,但仍然在該方法結束並且loginview被關閉後它不會 – jamespick