0

我在格式化字符串时得到 EXC_BAD_ACCESS。

NSString *object = [[NSUserDefaults standardUserDefaults] stringForKey:@"ObjectNumber"];
NSString *pin = [[NSUserDefaults standardUserDefaults] stringForKey:[NSString stringWithFormat:@"Pin%i ",object.intValue]];
NSString *msg = [NSString stringWithFormat:@"%@N", pin];

NSString *msg2 = @"0001N";

NSLog(@"Sending %@", msg);

tcpConnection *Obj = [tcpConnection alloc];
[Obj loadUpConnection:msg];

如果我使用 msg2 一切正常。但是,如果我使用 msg,即使 NSLog 正确打印 msg,它也会得到 exc_bad_access。

4

2 回答 2

3

我怀疑您的loadUpConnection:方法没有保留其参数。

关于objective-c,您似乎有很多东西要学习。

我担心这会让您感到困惑,而不仅仅是帮助,但是该msg2变量指向字符串的静态实例"0001N"(因为您在编译时对其进行了硬编码,系统会创建一个静态实例来使用)。这就是为什么它在使用时不会崩溃msg2,但在使用时会崩溃msgmsg指向一个动态分配的实例。返回给您的引用是“autoreleased”,这意味着它将在将来的某个时间点释放(通常在运行循环迭代结束时)。如果你的loadUpConnection:方法没有保留它的参数,那么msg字符串会在你尝试使用它之前被释放,从而导致EXC_BAD_ACCESS错误。因为msg2是一个静态实例,它永远不会被释放,因此它不会崩溃。

我唯一的建议是继续学习 - 拿起一本书,我推荐 Stephen Kochan 的“Programming in Objecive-C”,或 Aaron Hillegass 的“iPhone Programming A Big Nerd Ranch Guide”。

于 2012-11-30T09:16:35.237 回答
1

你必须初始化你 *Obj。

tcpConnection *Obj = [tcpConnection alloc] init...

于 2012-11-30T09:17:24.457 回答