- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
PushOnStackViewController *vc = [[PushOnStackViewController alloc] init];
vc.key = [self.keys objectAtIndex:[indexPath row]];
[self.navigationController pushViewController:vc animated:YES];
}
和
在PushOnStackViewController类的init方法中我有
- (id)init {
self.navigationItem.title = key;
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"texts" ofType:@"plist"]];
self.keys = [dict objectForKey:key];
[dict release];
NSLog(@"%@", self.key);
NSLog(@"%i", [self.keys count]);
return self;
}
但为什么我不能访问self.key?它返回null,即使它已被设置(它是一个字符串)。
当我在viewDidLoad中访问它时,它会返回正确的值...我还没读过的任何内容,或者我做错了什么?
提前致谢。
答案 0 :(得分:2)
您无法在-init函数中访问self.key,因为此时尚未设置它。你之后设置它:
PushOnStackViewController *vc = [[PushOnStackViewController alloc] init]; // init runs here.
vc.key = [self.keys objectAtIndex:[indexPath row]]; // but you don't set the key property until here.
您可以尝试在init函数中添加“key”参数,如下所示:
-(id)initWithKey:(NSString*)key {
self = [super init];
if (self) {
self.key = key;
...etc...
}
return self;
}
答案 1 :(得分:0)
在设置属性之前调用init方法。摆脱该init方法并将代码移动到viewDidLoad
以确保在完成所有属性设置后调用它。
除非您知道自己在做什么,否则不要为UIViewController
创建新的init方法。创建属性(就像你已经完成的)并在viewDidLoad
方法中访问该属性要容易得多。