繁体   English   中英

appdelegate中的NSMutableArray-EXEC_BAD_ACCESS

[英]NSMutableArray in appdelegate - EXEC_BAD_ACCESS

我正在尝试在appdelegate中使用全局数组作为我正在构建的演示的快速修复。 有关的代码

.h文件具有声明

{
NSMutableArray * trnEntered;
}

@属性(非原子,保留)NSMutableArray * trnEntered

.m文件具有以下代码-

trnEntered = [[NSMutableArray alloc] init];
NSLog(@“%@”,[trnEntered count]); //打印null。
[trnEntered addObject:@“ 1”];
NSLog(@“%@”,[trnEntered count]); //执行错误的访问权限。

不知道我在哪里错了。 看起来相当简单。

我在这里先向您的帮助表示感谢,
特雅

您的代码似乎有问题:

NSLog(@"%@",[trnEntered count]); // prints null.
[trnEntered addObject:@"1"]; 
NSLog(@"%@",[trnEntered count]); // exec bad access.

两次对NSLog的调用都试图将NSUInteger打印为Objective-C对象。 这将导致问题。 您应该使用NSLog(@"%d", [trnEntered count]);

我建议您阅读有关格式说明符的更多信息,这里有很多有用的信息。

更多信息:第二个NSlog正在尝试打印代码声明位于内存位置0x00000001的NSObject的description

第一个NSLog不应打印'null',因为您的init方式有问题,请尝试执行此操作。

trnEntered = [[NSMutableArray alloc] initWithCapacity:1];
trnEntered = [[NSMutableArray alloc] init];
NSLog(@"%@",[trnEntered count]); // prints null.
[trnEntered addObject:@"1"];
NSLog(@"%@",[trnEntered count]); // exec bad access.

原因是因为您使用的格式化字符串错误。 您正在尝试使用整数作为字符串指针,这当然会导致分段错误(或苹果术语EXC_BAD_ACCESS)。 使用%d打印整数,即[trnEntered count]返回的整数。

NSLog默认情况下以String格式打印ans,因此,如果要打印整数值,则必须使用%d及其值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM