2012-12-10 12 views
0

我試圖將一個託管對象的現有屬性值傳遞到模態segue視圖進行編輯。從「編輯模式」,我從一個UITableViewController子類(BreadRackTableViewController),通過一個嵌入式UINavigationController,使用一個模式segue到一個UIViewController子類(EditBreadRackTableViewController)。正常TableViewCell選擇推到另一個UITableViewController子類,但這暫時不重要。正在檢索UITableViewCell標籤值以傳遞到模態編輯視圖

我添加屬性,以我的編輯視圖控制器頭(和@synthesized),充當干將:

@property (nonatomic, strong) id existingBreadRackDataName; 
@property (nonatomic, strong) id existingBreadRackDataDetails; 

我想要做的是與現有的Core填充編輯視圖的場數據實體屬性,這些屬性先前已由用戶設置(理論上)。如果傳遞字符串值,我可以獲取數據以顯示,但我需要檢索並傳遞現有數據。

這是我目前有:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"editBreadRackSegue"]) 
    { 
     EditBreadRackTableViewController *ebrtvc = (EditBreadRackTableViewController *)[segue destinationViewController]; 

     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     BreadRackClass *breadRackClass = [[self fetchedResultsController]objectAtIndexPath:indexPath]; 
     // [ebrtvc setBreadRackClass:breadRackClass]; 
     ebrtvc.existingBreadRackDataName = breadRackClass.breadRackDataName; 
     ebrtvc.existingBreadRackDataDetails = [breadRackClass valueForKey:@"breadRackDataDetails"]; 
    } 
} 

這最後兩行代碼...

ebrtvc.existingBreadRackDataName = breadRackClass.breadRackDataName; 
ebrtvc.existingBreadRackDataDetails = [breadRackClass valueForKey:@"breadRackDataDetails"]; 

......他們都回零。如果我指定了一個文字字符串,那麼這個文字字符串顯示出它需要的地方。

所有這麼說,我的問題是:

如何檢索屬性的鍵值對選定的行(或只是爲textLabel和detailTextLabels),並將其分配給我的二傳手?

解決方案:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"editBreadRackSegue"]) 
    { 
     NSIndexPath *indexPath = [self.tableView indexPathForCell:sender]; 
     BreadRackClass *breadRackClass = [[self fetchedResultsController]objectAtIndexPath:indexPath]; 
     [segue.destinationViewController setExistingBreadRackDataName:[breadRackClass valueForKey:@"breadRackDataName"]]; 
     [segue.destinationViewController setExistingBreadRackDataDetails:[breadRackClass valueForKey:@"breadRackDataDetails"]]; 
    } 

    // code for other segues here... 
} 

我結束了去除ebrtv變量,並清理代碼一點點。儘管如此,使用indexPathForCell:發件人而不是indexPathForSelectedRow當聲明我的indexPath爲breadRackClass。

回答

0

我認爲indexPathForSelectedRow可能是一個問題。

您可以直接從didSelectRowAtIndexPath方法傳遞indexPath到prepareForSegue,如:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"editBreadRackSegue" sender:indexPath]; 
} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"editBreadRackSegue"]) 
    { 
     NSIndexPath *clickedIndexPath = (NSIndexPath*)sender; 
     if([clickedIndexPath isKindOfClass:[NSIndexPath class]]){ 

      BreadRackClass *breadRackClass = [[self fetchedResultsController]objectAtIndexPath:clickedIndexPath]; 

      EditBreadRackTableViewController *ebrtvc = (EditBreadRackTableViewController *)[segue destinationViewController]; 
      ebrtvc.existingBreadRackDataName = breadRackClass.breadRackDataName; 
      ebrtvc.existingBreadRackDataDetails = [breadRackClass valueForKey:@"breadRackDataDetails"]; 
     } 
    } 
} 

讓我知道它是否適合你。

+0

請原諒我,因爲我的Objective-C知識尚處於起步階段,但是如何使用適用於我的setters的適當值(並且不會使我從上面的代碼中排除的其他prepareForSegue語句失效無關緊要)? –

+0

我編輯了我的答案,以更好地解決您的問題。 –

+0

我把代碼放在那裏,正如建議的那樣,但增加了didSelectRowAtIndexPath創建了一些導航欄損壞。 我在我的viewDidLoad中聲明瞭一個編輯按鈕,如果在編輯過程中選中了表格單元格,它會以不同的方式進行插入。我在想,didSelectRowAtIndexPath會干擾,它看起來像。 雖然我對這兩個字段(existingBreadRack..etc)的NSLog語句仍然返回「(null)」。 –

相關問題