NSMutableArray计数总是返回(null)

时间:2012-07-16 20:11:44

标签: objective-c nsmutablearray

有谁能告诉我为什么[NSMutableArray count]总是在调试窗口中返回(null)?它被初始化,匹配的字母正在注册,但它仍然没有返回任何东西,只有null。

@implementation NSString (Word)
-(NSMutableArray *)placeOfLetter: (char)letterAsked;{

    NSMutableArray *matchingLetters;
    matchingLetters=[[NSMutableArray alloc]init];
    int len=(int)[self length];
    NSLog(@"length of word: %i, letterAsked=%c",len,letterAsked);
    NSUInteger counter=[matchingLetters count];

    for (NSUInteger x=0; x<[self length]; x++) {
        if ([self characterAtIndex:x]==letterAsked){
            NSNumber *foundPosition = [NSNumber numberWithUnsignedInteger:x];
            [matchingLetters addObject:foundPosition];
            NSLog(@"found at place : %@",foundPosition);
            NSLog(@"counter: %@",counter);
        }
    }
    if ([matchingLetters count]<=0){
         NSLog(@"counter: %@",counter);
         NSLog(@"no letters ");
        return nil;
    }else{
        return matchingLetters;
    }
}

2 个答案:

答案 0 :(得分:1)

我假设您指的是counter变量?您在添加任何元素之前将matchingLetters的计数分配给此变量,因此此时它当然被指定为0。

当您稍后NSLog() counter的值时,它仍然是0.没有自动更新机制,只要您有新的matchingLetters计数,就会神奇地更新计数器ve为此数组添加了元素。它显示为(null),因为您使用的是%@而不是%qu

如果那不是你所指的,你是指你在调试器中破坏你的应用程序,然后输入p -[matchingLetters count]?或者您指的是调试控制台左侧显示的部分变量(如果是这样,您所看到的截图可能会有所帮助)?

答案 1 :(得分:1)

  

NSLog(@“counter:%@”,counter);

您在这里使用%@格式说明符,这意味着NSLog需要一个对象指针。但是你传递的是NSUInteger,这只是一个数字。

如果你在这里得到“(null)”,你很幸运,数组中没有任何对象。如果数组有一些对象,你会得到一个像7这样的数字,并将其解释为指向对象的指针可能会导致崩溃。

修复方法是简单地使用正确的格式说明符(%u):

NSLog(@"counter: %u",counter);