簡體   English   中英

tableView:didSelectRowAtIndexPath:不一致

[英]tableView: didSelectRowAtIndexPath: inconsistency

我對Objective-C和iOS應用程序開發還很陌生,因此對於我的問題的答案很簡單,我深表歉意。 我正在嘗試將GTGift對象的指針從一個視圖控制器發送到另一個視圖控制器。 當我輸入以下代碼時,對象被發送並存儲在第二個視圖控制器的實例變量中:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    GTGift *selectedGift = [[[GTGiftStore sharedStore] allGifts] objectAtIndex:[indexPath row]];
    GTDetailViewController *dvc = [[self storyboard] instantiateViewControllerWithIdentifier:@"detailVC"];
    [dvc setDetailGift:selectedGift];
    [[self navigationController] pushViewController:dvc animated:YES];
}

但是,當我在第一個視圖控制器中輸入以下代碼時:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    gift = [[[GTGiftStore sharedStore] allGifts] objectAtIndex:[indexPath row]];
    GTDetailViewController *dvc = [[self storyboard] instantiateViewControllerWithIdentifier:@"detailVC"];
    [[self navigationController] pushViewController:dvc animated:YES];
}

並在第二個視圖控制器中的代碼:

- (void)viewWillAppear:(BOOL)animated {
    GTGiftsViewController *gvc = [[self storyboard] instantiateViewControllerWithIdentifier:@"giftsVC"];
    detailGift = [gvc gift];
    NSLog(@"%@", detailGift);
}

detailGift返回null。

我一生無法理解為什么,如果我可以使用類似於無效代碼段的方法,對我的應用程序將更加實用。 如果有人可以為我提供有關此主題的啟發,或者將我指向另一個方向來完成相同的任務,我將不勝感激!

您的問題是“實例化”一詞的含義。 :-)

viewWillAppear您正在創建一個全新的GTGiftsViewController對象,該對象對第一個GTGiftsViewController對象中選擇的禮物GTGiftsViewController

(做這種事情的“ storyboard方式”是在第一個視圖控制器中創建prepareForSegue:sender:方法並在那里進行工作。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM