2014-04-15 44 views
-2

我已按照教程Passing Data between View Controllers部分傳遞數據轉發。我的代碼是:將整數傳遞給DetailViewController

MasterViewController.h:

-(void)pushViewController: (UIViewController *)detailVC animated:(BOOL)animated; 

MasterViewController.m:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    UITableViewCell *cell=[tableView cellForRowAtIndexPath:indexPath]; 
    NSInteger num = indexPath.row; 

    DetailViewController *detailVC = [[DetailViewController alloc] initWithNumber:indexPath.row]; 
    detailVC.number = num; 

    [self pushViewController:detailVC animated:YES]; 

} 

我想整數NUM傳遞給我的DetailViewController。但是我得到了線程1:SIGABRT。發生什麼事?

+1

見http://raywenderlich.com/ 10209/my-app-crashed-now-what-part-1 – rmaddy

+0

添加斷點並檢查... –

+0

向您的帖子中添加'pushViewController:animated:'方法代碼。 –

回答

0

我最好的猜測(沒有看到你的@interface的DetailViewController)是它只是一個detailVC實例離開後,你把它放在屏幕上。

簡單的解決方案:用一個實例變量代替:

@interface WhateverClassYouAreIn 
@property (nonatomic, strong) DetailViewController *detailVC 
@end 

// ... 
self.detailVC = [[DetailViewController alloc] initWithNumber:indexPath.row]; 

發生這種情況的原因是,如果沒有實例變量,所述detailVC的存儲持續時間是在其中它被聲明的方法的範圍。一般來說,任何在屏幕上顯示的VC都應該被別的東西「強力」保留,一直回到根vc。

-1

在DetailViewController.h中定義了「initWithNumber」方法嗎?

@interface DetailViewController : UIViewController 
- (instancetype)initWithNumber:(NSInteger)number; 
@end 
1

MasterViewController不從UINavigationController繼承。

如果沒有導航堆棧,則無法推入導航堆棧。

您可以添加一個,或者呈現新的VC,具體取決於您的GUI設計的目標是什麼。

P.S. 什麼是點設置數量的兩倍,你是:

NSInteger num = indexPath.row; 
    DetailViewController *detailVC = [[DetailViewController alloc] initWithNumber:indexPath.row]; 
    detailVC.number = num; 

你要麼使用init設置或直接設置它,你正在做的這兩種方法

+0

如果我嘗試[自我presentViewController:detailVC動畫:是完成:無];並點擊表格中的一個單元格,顯示右側頁面,但不再有後退按鈕。你能告訴我會發生什麼嗎? – user1189952

+0

因爲後退按鈕由導航控制器管理(作爲導航欄的一部分)。如果你實際上已經有一個導航控制器在你的應用程序的某個地方(也許MasterViewController本身被壓入導航堆棧或嵌入到一個,那麼你可以得到一個處理它,然後做推,如果你想要後退按鈕) – Gruntcakes

+0

I不明白這一點。我必須做什麼? – user1189952