2013-09-11 51 views
0

所以我想要做的是我有一個NSMutableArray的數據我需要傳遞給另一個UITableViewController。這個NSMutableArray是一個NSDictionaries數組,它包含我想要在每個表視圖單元格的標題中顯示的信息。在我繼續之前,這是我的代碼。通過performSelector從一個UITableViewController到另一個UITableViewController的數據尋找:withObject:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSIndexPath* indexPath = [self.tableView indexPathForCell:sender]; 

    if ([segue.identifier isEqualToString:@"Title Query"]) { 

     UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:indexPath]; 
     NSString* cellText = cell.textLabel.text; 
     NSMutableArray* photosToBeShown = [self titleQuery:cellText]; 

      if ([segue.destinationViewController respondsToSelector:@selector(setPhotoTitles:)]) { 
       [segue.destinationViewController performSelector:@selector(setPhotoTitles:) withObject: photosToBeShown]; 
       NSLog(@"%@", photosToBeShown); 
      }  
    } 

} 

的方法setPhotoTitles:一個由performSelector叫:withObject:是我seguing,因爲我想收集陣列的財產(NSMutableArray的*)上的UITableViewController photoTitles的制定者,所以我可能再調用下面的方法來設置我的表格視圖單元格的標題。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Photo Title Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    cell.textLabel.text = [self titleForRow:indexPath.row]; 

    return cell; 
} 
- (NSString *) titleForRow: (NSUInteger) row 
{ 
    return self.photoTitles[row]; 
} 

當我運行這段代碼是我在調用我的setter方法(setPhotoTitles :)一個無限循環最終會發生什麼。現在我的問題是什麼是解決這個問題的正確的概念方式,或者我怎樣才能以這種方式實現它,而不會以無限循環結束。我有我需要在我的數組中的所有信息,但我需要將數組傳遞到新的控制器,但也能夠使用UITableViewCell方法來設置行標題。

+0

您是否覆蓋photoTitles的setter? – rdelmar

+0

是的,我做到了。我現在意識到這是造成我的問題,但爲什麼你不能重寫setter? – ddelnano

+0

你應該能夠 - 你在那個方法中做了什麼? – rdelmar

回答

1

prepareForSegue:方法,而不是覆蓋setPhotoTitles:,則應該創建在目標視圖控制器NSArray屬性,如photoTitles數組傳遞到目的地視圖控制器的NSArray屬性。因此,您的prepareForSegue方法看起來像這樣:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSIndexPath* indexPath = [self.tableView indexPathForCell:sender]; 

    if ([segue.identifier isEqualToString:@"Title Query"]) { 

     UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:indexPath]; 
     NSString* cellText = cell.textLabel.text; 
     NSMutableArray* photosToBeShown = [self titleQuery:cellText]; 

     YourCustomViewController *customViewController = segue.destinationViewController; 
     customViewController.photosArrayProperty = photosToBeShown; 
    } 

} 
+0

然而,每次prepareForSegue:sender:被稱爲它將另一個數組添加到屬性擦除當前屬性的數組並初始化一個新的數組。所以我的財產持續增長。 – ddelnano

+0

Nevermind這是我的一個錯誤,因爲我使用了一個可變數組,當我真的需要一個實例化的數組的新實例時,我的數組繼續增長。謝謝你的幫助 – ddelnano

相關問題