0

谁能告诉我为什么 [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;
    }
}
4

2 回答 2

1

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

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

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

于 2012-07-16T20:21:42.823 回答
1

NSLog(@"计数器:%@",counter);

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

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

解决方法是简单地使用正确的格式说明符 ( %u) 代替:

NSLog(@"counter: %u",counter);
于 2012-07-16T20:26:04.963 回答