这是一个菜鸟问题,但我不能为我的生活弄清楚为什么我的MSMutableArray类变量没有被设置。以下是我的代码:
@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)
为什么没有设置变量?我查看了以下question,并且在我的代码和接受的答案之间没有看到任何不同。
感谢。
答案 0 :(得分:1)
将%@更改为%lu,你会看到。
答案 1 :(得分:1)
count方法返回NSUInteger。
请尝试使用此日志格式:
NSLog(@"imageArr size::%u",[imageArr count]);
答案 2 :(得分:1)
%@说明符期望参数为id
(或指向对象的指针)。 -count
返回不是对象的NSUInteger。由于您的数组为空,因此计数为零,因此该参数被解释为nil对象,当与(null)
说明符一起使用时,该对象将显示为%@
。
如果参数不是nil,则会向其发送-description
以获取要在日志消息中插入的字符串。因此,如果向数组添加对象,NSLog
将尝试将1解释为对象指针并向其发送-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]);
答案 3 :(得分:0)
NSLog(@"imageArr size::%@",[imageArr count]);
当你想要“写一个对象”AFAIK时,你应该使用%@,这就像写[对象描述]。 [imageArr count]是一个int,对吗?它不是指向对象的指针。
您应该使用%i而不是%@。大小将为0。
尝试NSLog(@“imageArr size ::%@”,imageArr);如果你想写一个地址