我不明白为什么在将某些数据传递给此控制器时,将init
方法添加到我的视图控制器会将某些ivars设置为(null)
。这是我用来设置一些ivar值并调用相关视图控制器的代码:
MyViewController *vc = [[MyViewController alloc] init];
vc.search_type = [NSMutableString stringWithString:@"buy"];
[self.navigationController pushViewController:vc animated:NO];
在MyViewController
中,search_type
ivar按预期包含存储在上一个视图控制器中的@"buy"
字符串。但是,当我在下面添加init
方法时,search_type
在(null)
尝试使用MyViewController
时始终包含(id)init
{
self = [super init];
if(self)
{
// some other code here
}
return self;
}
字符串:
@property (nonatomic,retain) NSMutableString *search_type;
search_type在接口中声明为:
@synthesize search_type;
并在实现文件中合成:
{{1}}
答案 0 :(得分:1)
目前还不完全清楚你要做的是什么,但是如果你说search_type
你的init
方法// some other code here
是{0}},那就是因为你的视图控制器在设置该属性之前初始化。
如果在运行更多代码之前需要将该对象提供给视图控制器,则有几个选项:
initWithSearchType:
。viewDidLoad
,viewWillAppear
或类似方法中的代码。其中哪一项是恰当的,取决于你正在做什么。
答案 1 :(得分:0)
search_type是可变的,你在MyViewController的init方法中初始化吗?
答案 2 :(得分:0)
您没有访问此代码中的实例变量
MyViewController *vc = [[MyViewController alloc] init];
MyViewController.search_type = [NSMutableString stringWithString:@"buy"];
[self.navigationController pushViewController:vc animated:NO];
您创建名为vc
但未使用它的实例。试试这个:
MyViewController *vc = [[MyViewController alloc] init];
vc.search_type = [NSMutableString stringWithString:@"buy"];
[self.navigationController pushViewController:vc animated:NO];
HTH。
<强>更新强>
很难说出你共享的代码中存在什么问题。我基于你所分享的内容的另一个猜测是确保你定义了你的属性并正确地合成它。
// in the header file
@property(nonatomic, copy) NSMutableString *search_type;
// in your implementation
@synthesize search_type = m_search_type;
如果你已经这样做了,你应该分享更多的MyViewController
来源。无论您是否在init
方法中初始化变量都无关紧要,因为无论如何您在实例化它之后都会为其赋值。