我試圖將數據從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到一個字符串,例如作爲@「測試」 - 一切按預期工作。
如果任何人都可以幫助我,我一直堅持這一段時間,我將不勝感激。謝謝!
嘗試在'viewWillAppear'中使用'payeeNameText'而不是'viewDidLoad' – Paulw11
您確定'self.payeeName'不是'nil'嗎? – rmaddy
謝謝大家的建議。我已經更新了這篇文章,但我認爲它與設置或賦值位置沒有任何關係,因爲如果我在prepareForSegue中爲self.payeeNameText硬編碼字面字符串,那麼一切正常。 – ldet