0

这是一个菜鸟问题,但我一生都无法弄清楚为什么没有设置我的 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)

为什么没有设置该变量?我查看了以下问题,并没有发现我的代码和接受的答案有什么不同。

谢谢。

4

4 回答 4

1

将 %@ 更改为 %lu,您会看到。

于 2012-04-04T14:41:11.300 回答
1

count 方法返回一个 NSUInteger。

请尝试使用此日志格式:

NSLog(@"imageArr size::%u",[imageArr count]);
于 2012-04-04T14:41:28.593 回答
1

%@ 说明符期望参数是一个id(或指向对象的指针)。 -count返回一个不是对象的 NSUInteger。由于您的数组为空,因此计数为零,因此参数被解释为 nil 对象,(null)与说明%@符一起使用时会出现。

如果参数不为零,-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]);
于 2012-04-04T14:55:09.730 回答
0
NSLog(@"imageArr size::%@",[imageArr count]);

当你想“写一个对象”AFAIK 时,你应该使用 %@,就像写 [对象描述]。[imageArr count] 是一个 int,对吗?它不是指向对象的指针。

您应该使用 %i 而不是 %@。大小将为 0。

试试 NSLog(@"imageArr size::%@",imageArr); 如果你想写一个地址

于 2012-04-04T14:44:00.653 回答