7

このエラーを生成している次のコードがあります。subarrayWithRange メッセージが文字列に送信される理由がわかりません。明らかに配列の場合は?

static const int kItemsPerView = 20;
NSRange rangeForView = NSMakeRange( page * kItemsPerView, kItemsPerView );

NSMutableArray *temp = [[APP_DELEGATE keysArray] mutableCopyWithZone:NULL]; 
NSArray *itemsForView = [temp subarrayWithRange:rangeForView];

for (int loopCounter = 0;loopCounter < r*c;loopCounter++){
    NSLog(@"%i: %@ ", loopCounter, [itemsForView objectAtIndex:loopCounter]);
}

エラー:

-[NSCFString subarrayWithRange:]: unrecognized selector sent to instance 0x6b071a0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: [NSCFString subarrayWithRange:]:

ありがとう

4

2 に答える 2

29

この種のエラーは通常、メモリ管理に関連しています。基本的に、以前の占有者が予期せず消えたため、他のオブジェクトが占有しているアドレスにメッセージを送信しています。そのアドレス空間は何でも占有される可能性があるため、たまたま NSCFString に応答しない何かを要求しているだけです。

一時配列を作成した直後にデバッガーを一時停止すると、temp に何が割り当てられていることがわかりますか? -keysArray が返すものに何か問題があると思います。返されるはずのメモリがどのように処理されるかを再確認することをお勧めします。名前からすると、アプリ デリゲートには「keysArray」という配列がインスタンス変数として含まれていると思います。おそらく、作成または割り当て時に適切に保持されていないのでしょうか?

于 2010-10-04T19:47:53.377 に答える
5

だから私はこれを持っていました。私は愚かなことをしました。UITextView をテキスト プロパティではなく文字列に割り当てました。すなわち:

myObj.txtbxThing = [NSString stringWithFormat:@"%@", stuffString];

それ以外の:

myObj.txtbxThing.text = [NSString stringWithFormat:@"%@", stuffString];
于 2012-04-02T00:43:24.690 に答える