[英]Why is my Objective-C class instance variable not being set?
这是一个菜鸟问题,但我终生无法弄清楚为什么未设置我的 MSMutableArray class 变量。 下面是我的代码:
@interface MyClass : NSObject {
NSMutableArray *imageArr;
}
@implementation MyClass
-(id)init
{
self = [super init];
if (self) {
imageArr = [[NSMutableArray alloc] init];
}
return self;
}
- (void) checkImageArr {
NSLog(@"imageArr size::%@",[imageArr count]);
}
当此代码运行时,以下内容将设置到日志中:
imageArr size::(null)
为什么没有设置该变量? 我查看了以下问题,没有发现我的代码和接受的答案之间有什么不同。
谢谢。
将 %@ 更改为 %lu,您就会看到。
count 方法返回一个 NSUInteger。
试试这个日志格式:
NSLog(@"imageArr size::%u",[imageArr count]);
%@ 说明符期望参数是一个id
(或指向一个对象的指针)。 -count
返回一个 NSUInteger,它不是 object。由于您的数组为空,因此计数为零,因此参数被解释为 nil object,与%@
说明符一起使用时显示为(null)
。
如果参数不是 nil, -description
将被发送给它以获取要插入到日志消息中的字符串。 因此,如果您将 object 添加到数组中, NSLog
将尝试将 1 解释为 object 指针并将-description
发送给它。 这将导致EXC_BAD_ACCESS
异常(试试吧。)。
您需要一个将参数解释为数字的格式说明符。 NSUinteger
具有以下定义
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef unsigned long NSUInteger;
#else
typedef unsigned int NSUInteger;
#endif
所以它可能是一个无符号长整数。 为了安全起见,我总是投它来确保,所以你需要这个:
NSLog(@"imageArr size::%lu", (unsigned long)[imageArr count]);
NSLog(@"imageArr size::%@",[imageArr count]);
当你想“写一个对象”AFAIK 时,你应该使用 %@,就像写 [object description]。 [imageArr count] 是一个整数,对吧? 它不是指向 object 的指针。
您应该使用 %i 而不是 %@。 大小将为 0。
试试 NSLog(@"imageArr size::%@",imageArr); 如果你想写一个地址
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.