我知道這個問題已經被問到了,但是我已經閱讀了回覆,通過了修復並且仍然存在一個我無法識別的問題。IOS Obj-C ViewController沒有傳遞值
我有一個類似於電子郵件的IOS應用程序。它有一個InboxVC,它是一個帶有自定義原型單元格的tableVC,它在選擇時觸發messageDetailVC。
問題是,messageDetailVC被觸發,但值沒有被傳遞給它。在添加Storyboard問題之前,我添加了日誌消息來評估代碼中的值,並且傳遞的變量(messageID)具有NULL值。
有人能告訴我我失蹤或做錯了什麼嗎?我的代碼是:
InboxVC.m(片段)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
NSLog(@"%@: Message touched...", LOG_TAG);
messageDetail *mdvc = [[messageDetail alloc] init];
mdvc.messageID = @"123456789-1";
[self.navigationController pushViewController:mdvc animated:YES];
NSLog(@"%@: messageID value is = %@",LOG_TAG,mdvc.messageID);
//messageID has valid value here
}
messageDetail.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface messageDetail : UIViewController
{
NSString *messageID;
}
@property (strong, nonatomic) NSString *messageID;
@property (strong, nonatomic) IBOutlet UITextView *body;
messageDetail.m
#import <Foundation/Foundation.h>
#import "messageDetail.h"
static NSString * LOG_TAG = @"messageDetailController";
@implementation messageDetail
@synthesize messageID;
@synthesize body;
- (void)viewDidLoad {
[super viewDidLoad];
body.text = messageID;
//debug messages
NSLog(@"%@:Added messageID as Body text", LOG_TAG);
NSLog(@"%@:Value of body.text is = %@", LOG_TAG, body.text);
NSLog(@"%@:Value of messageID is = %@", LOG_TAG, messageID);
//messageID has null value here
}
- (void) viewWillAppear:(BOOL)animated {
[self.navigationController setNavigationBarHidden:NO];
}
MainStoryboard:
我有一個messageDetail視圖綁定到UIViewController的messageDetail子類。從原型單元格的選擇事件到messageDetailVC(show)有一個標識符爲「s_msgDetail」的segue。正如我上面所說的,messageDetailVC出現了,而不是body.text被設置爲「messageID」的值。
也許viewDidLoad中的代碼正在執行此行之前:mdvc.messageID = @「123456789-1」;做到這一點的正確方法是一個自定義的init方法,它接受你想要傳遞的任何輸入參數。 – Woodstock