0

私のiPhoneアプリでは、次のような配列からいくつかの値を取得する必要があります。

string1 = [array objectAtIndex:0];
string2 = [array objectAtIndex:1];

ただし、ユーザーデータによっては、オブジェクトが配列に存在しない場合があります。このような行が呼び出され、オブジェクトが存在しない場合、アプリは範囲外エラーで自然にクラッシュします。

では、どうすればこれを回避できますか?そのオブジェクトが存在しないことを検出し、それに応じて文字列を設定するにはどうすればよいですか?

たとえば、インデックスにオブジェクトが存在する場合、string=..。

それ以外の場合、オブジェクトがインデックスに存在しない場合、string=..。

4

2 に答える 2

4

NSArrayには、インデックスが有効かどうかを判断するために使用できるcountプロパティがあります。

if(array.count < index)
{ string1 = [array objectAtIndex:index]; } 
else
{ string1 = @"Not found"; }

これをユニバーサル機能にしたい場合は、カテゴリを使用して、NSArrayのメソッドとして追加できます。

@interface NSArray()
- (NSString*) objectAtIndexWithCheck:(int) index;
@end

@implementation NSArray
-(NSString*) objectAtIndexWithCheck:(int) index
{
   if(self.count < index)
   { return [self objectAtIndex:index]; }
   else
   { return @"Not found"; }
}
@end
于 2012-09-19T01:17:51.667 に答える
0

そのインデックス番号の配列要素がないということですか、それともその場所にあるオブジェクトが収集されているということですか?前者の場合は、配列のインデックス値をと比較するだけarray.countです。「範囲外エラー」についてのあなたの言及は、これがシナリオであることを示唆しています。

ただし、後者の場合はバグを修正してください。深刻なヒープ管理のバグがない限り、NSArrayのエントリが無効なアドレスになることはなく、例外処理でこれから回復する信頼できる方法はありません。

于 2012-09-19T01:24:10.763 に答える