Objective c 为什么init方法将这个ivar设置为(null)?
我不明白为什么将Objective c 为什么init方法将这个ivar设置为(null)?,objective-c,cocoa-touch,instance-variables,init,Objective C,Cocoa Touch,Instance Variables,Init,我不明白为什么将init方法添加到我的视图控制器时,会将一些IVAR设置为(null)。下面是我用来设置一些ivar值并调用关联视图控制器的代码: MyViewController *vc = [[MyViewController alloc] init]; vc.search_type = [NSMutableString stringWithString:@"buy"]; [self.navigationController pushViewController:vc animated:NO
init
方法添加到我的视图控制器时,会将一些IVAR设置为(null)
。下面是我用来设置一些ivar值并调用关联视图控制器的代码:
MyViewController *vc = [[MyViewController alloc] init];
vc.search_type = [NSMutableString stringWithString:@"buy"];
[self.navigationController pushViewController:vc animated:NO];
在MyViewController
中,search\u type
ivar按预期包含存储在上一个视图控制器中的@“buy”
字符串。但是,当我在下面添加init
方法时,search\u type
在MyViewController
中尝试使用时总是包含(null)
字符串:
(id)init
{
self = [super init];
if(self)
{
// some other code here
}
return self;
}
搜索类型在接口中声明为:
@property (nonatomic,retain) NSMutableString *search_type;
并在实施文件中综合:
@synthesize search_type;
搜索类型是可变的,您是否在MyViewController的init方法中初始化?您没有访问此代码中的实例变量
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];
嗯
更新
很难说您共享的代码中有什么问题。根据您共享的内容,我的另一个猜测是确保您正确定义了属性并合成了它
// in the header file
@property(nonatomic, copy) NSMutableString *search_type;
// in your implementation
@synthesize search_type = m_search_type;
如果您已经这样做了,您可能应该分享更多的
MyViewController
源代码。无论您是否在init
方法中初始化该变量,这都无关紧要,因为您在实例化它之后正在为它分配一个新值。不完全清楚您要做什么,但是,如果您在init
方法中说search\u type
为nil,您在此处放置了//其他一些代码,那是因为您的视图控制器在设置该属性之前已初始化
如果需要在运行更多代码之前将该对象提供给视图控制器,则有几个选项:
- 创建自定义初始化器,例如
initWithSearchType:
- 为该属性创建自定义设置器
- 在
viewdiload
中执行代码,view将出现
或类似方法
以下哪一项是合适的取决于您正在做什么。搜索类型是可变的,但我没有初始化它。我应该吗?是的,如果是可变的,你应该唯一改变的是现在搜索类型包含空字符串“”,而不是MyViewController的标题中的(null)。搜索类型是一个属性?我得到-1,因为我试图帮助我,我只是在输入stackoverflow时犯了一个错误…无论如何thx:)用另一个想法更新了答案。介意共享更多吗?NS[Mutable]String
属性(或任何具有可变子类的类)通常应该声明为(copy)
,这样您就不会共享可变对象。当我使用retain时,得到了带有“copy”的点,我要测试它,但是“m\u search\u type”在哪里在您的代码中,它只是为生成的ivar分配了一个名称。检查我试图做的只是将search\u type值传递给另一个控制器,但是当我添加init方法时,传递的值似乎在某个地方被清除,因为当我尝试使用search\u type时,它现在包含一个空字符串“”,如果我在init method中alloc/init search type或(null)如果未在尝试使用search\u type
的地方发布代码,并发布完整的init
method.init方法包含search\u type=[[NSMutableString alloc]init];然后在viewDidLoad中,我只生成NSLog(@“search\u type=%@”,search\u type);并打印带有空字符串的search_type=“”