Objective c NSMUTABLEARRY count始终返回(null)

Objective c NSMUTABLEARRY count始终返回(null),objective-c,nsmutablearray,Objective C,Nsmutablearray,有人能告诉我为什么[NSMutableArray count]在调试窗口中总是返回(null)吗?它已初始化,匹配的字母正在注册,但它仍然不返回除null以外的任何内容 @implementation NSString (Word) -(NSMutableArray *)placeOfLetter: (char)letterAsked;{ NSMutableArray *matchingLetters; matchingLetters=[[NSMutableArray allo

有人能告诉我为什么[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;
    }
}
@实现NSString(Word)
-(NSMutableArray*)字母的位置:(char)letterask;{
NSMutableArray*匹配字母;
matchingLetters=[[NSMutableArray alloc]init];
int len=(int)[自身长度];
NSLog(@“字长:%i,字母询问=%c”,len,字母询问);
NSU整数计数器=[matchingLetters count];

对于(整数x=0;x我假设您指的是
计数器
变量?在添加任何元素之前,您将
匹配字母的计数分配给该变量,因此此时它当然被分配为0

当您稍后将
NSLog()
计数器的值设置为0时,它仍然是0。没有自动更新机制,一旦您将元素添加到此数组中,它将神奇地使用新的
匹配字母计数更新计数器。它显示为(null)因为您使用的是
%@
而不是
%qu

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

NSLog(@“计数器:%@”,计数器)

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

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

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


这行不正确:NSLog(@“counter:%@”,counter);。counter不是对象,因此使用%@是不正确的。这是第一行。我犯了一个愚蠢的错误
NSLog(@"counter: %u",counter);