我正在编写一个iPhone应用程序,试图在用户点击UITableView中的元素时创建第二个视图。代码看起来像
ReplyToViewController *reply = [[ReplyToViewController alloc] initWithNibName:@"ReplyTo" bundle:nil];
reply.delegate = self;
Message *message = [resultData objectAtIndex:indexPath.row];
int dbid = [message.bizid intValue];
NSLog(@"dbid=%d",dbid);
reply.currentMessage = message;
reply.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:reply animated:YES];
正确创建回复对象并且视图正确。上面代码段中的最后一行调用一些框架代码,最终调用ReplyToViewController的viewDidLoad方法。上面代码中的回复对象的地址和viewDidLoad中对象的地址不相同。
知道这个新对象来自哪里?我该如何调试?我还在ReplyToViewController中添加了以下方法的init方法,希望它会被调用,我可以找到谁在创建这个新对象。但它并没有停止在这种方法中。
非常感谢任何帮助。
- (id) init
{
/* first initialize the base class */
self = [super init];
return self;
}
// Following gets called from the 1st code segment.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])
{
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(currentMessage.text]; // THIS returns nil and the program fails later in the code.
}
答案 0 :(得分:0)
我确定这是无关的,但我想这个:
NSLog(currentMessage.text];
应该是这样的:
NSLog(currentMessage.text);
此外,我发现分析(Cmd + Shift + A)我的代码总是有助于追踪潜在的内存泄漏并防止过度内存分配。
答案 1 :(得分:0)
最可能的解释是报告错误。
通常当人们看到对象的不同地址时,因为他们在日志语句中使用了错误的格式描述符。
常见错误是:
NSLog(@"Object address=%i", myObject); // any numerical formatter %d,%f...
...产生一个随机数。你真的想要:
NSLog(@"Object address=%%qX",&myObject);
...以十六进制转储地址。
另一个错误是:
NSLog(@"Object address=%%qX",&[myObject description]);
...返回每次更改的描述字符串的地址。
还有其他人,但你明白了。
如果您正在使用日志语句,请检查调试器中的地址,以确认它是另一个对象。
不相关,但我会摆脱类的初始化方法,因为它们除了调用super之外什么都不做。如果不进行自定义,您可以将编译器默认为super。