2015-12-15 60 views
1

我試圖將數據從1 viewcontroller傳遞到另一個,但NSString在某處丟失。我提前道歉,我覺得我在這裏失去了一些愚蠢的東西。我已經閱讀了很多關於這方面的文章,但我無法弄清楚爲什麼我的NSString在視圖之間迷路了。如果任何人都可以給我一個指針我真的很感激:目標c內存/指針問題從prepareForSegue傳遞到另一個viewcontroller

ViewController1通過payee.name到ViewController2 payeeNameText這裏:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    if([segue.identifier isEqualToString:@"makePayment"]){ 
     VC2* paymentController = (VC2*)[segue destinationViewController]; 
     paymentController.payeeNameText = [payee.name copy]; 
    } 
} 

ViewController2試圖使用這些數據來在payeeName的UILabel顯示收款人名稱:

- (void)viewDidLoad { 

    [super viewDidLoad]; 
    NSLog(@" test %@", self.payeeNameText); 
    self.payeeName.text = [NSString stringWithFormat:@"%@", self.payeeNameText]; 
    } 

它在NSLog語句中正確打印出來,但文本字段顯示爲空。我也在打印出相同的變量後,我點擊一個按鈕,其中也是空的。

這是在視圖控制器2頭文件收款人的定義:

@property (nonatomic, copy) NSString *payeeNameText; 

和我的文本字段的定義:

@property (nonatomic) IBOutlet UILabel *payeeName; 

如果我設置paymentController.payeeNameText到一個字符串,例如作爲@「測試」 - 一切按預期工作。

如果任何人都可以幫助我,我一直堅持這一段時間,我將不勝感激。謝謝!

+0

嘗試在'viewWillAppear'中使用'payeeNameText'而不是'viewDidLoad' – Paulw11

+2

您確定'self.payeeName'不是'nil'嗎? – rmaddy

+0

謝謝大家的建議。我已經更新了這篇文章,但我認爲它與設置或賦值位置沒有任何關係,因爲如果我在prepareForSegue中爲self.payeeNameText硬編碼字面字符串,那麼一切正常。 – ldet

回答

0

我試圖顯示從http獲取請求中返回的數據,但我在按鈕單擊和返回的數據上顯示模式segue。所以看起來有一個競爭條件,數據沒有得到適當的設置。

首先,我改變了我的SEGUE「秀」 - 這結束了我展示2個獨立的屏幕1不中,然後用一個與數據替換的數據(這是我抓住了這個錯誤)

所以解決方案是從我的按鈕中刪除我的segue並將其附加到我的View Controller,然後在我的get請求返回後僅調用一次。

相關問題