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(@"カウンター: %@",カウンター);

ここではフォーマット指定子を使用しています。%@つまりNSLog、オブジェクト ポインターが必要です。しかし、あなたNSUIntegerは単なる数字である を渡しています。

ここで "(null)" が表示された場合、配列にオブジェクトが含まれていないことは幸運です。配列にいくつかのオブジェクトがある場合、7back のような数値を取得し、それをオブジェクトへのポインターとして解釈するとクラッシュする可能性があります。

%u修正は、代わりに正しい書式指定子 ( ) を使用することです。

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