オンライン サーバーが台無しになっても、アプリを正常に続行させたい。@try
危険な行をブロックで包んでみました。それでも、次のようにクラッシュします。
メソッド:
+ (NSArray *)findAllFor:(NSObject *)ratable {
NSString *ratingsPath = [NSString stringWithFormat:@"%@%@/%@/%@%@",
[self getRemoteSite],
[ratable getRemoteCollectionName],
[ratable getRemoteId],
[self getRemoteCollectionName],
[self getRemoteProtocolExtension]];
Response *res = [ORConnection get:ratingsPath withUser:[[self class] getRemoteUser]
andPassword:[[self class] getRemotePassword]];
NSArray *ratings;
@try {
ratings = [self fromXMLData:res.body];
}
@catch (NSException *e) {
ratings = [NSArray array];
}
return ratings;
}
スタック トレース:
プログラム受信信号:「SIGABRT」。 2010-08-07 16:38:51.846 TalkToHer[68608:7003] *** キャッチされていない例外 'NSRangeException' が原因でアプリを終了しています。理由: '*** -[NSArray objectAtIndex:]: 境界を超えたインデックス 1 [0 .. 0]' *** 最初のスロー時のコール スタック: ( 0 CoreFoundation 0x02932919 __exceptionPreprocess + 185 1 libobjc.A.dylib 0x02a805de objc_exception_throw + 47 2 CoreFoundation 0x0292858c -[__NSArrayI objectAtIndex:] + 236 3 TalkToHer 0x00009fa7 -[FromXMLElementDelegate パーサー:didEndElement:namespaceURI:qualifiedName:] + 425 4 ファウンデーション 0x0017bcc1 _endElementNs + 453 5 libxml2.2.dylib 0x02d9deb6 xmlParseXMLDecl + 1353 6 libxml2.2.dylib 0x02da8bc1 xmlParseChunk + 3985 7 Foundation 0x0017b4c2 -[NSXMLParser parse] + 321 8 TalkToHer 0x0000b14d +[NSObject(XMLSerializableSupport) fromXMLData:] + 201 9 TalkToHer 0x00031a6c +[Rating findAllFor:] + 320 10 TalkToHer 0x00032d67 -[FirstClassContentPiece(Ratable) updateRatings] + 96 11 TalkToHer 0x00004d5f __-[InspirationController tableView:didSelectRowAtIndexPath:]_block_invoke_3 + 33 12 libSystem.B.dylib 0x9792efe4 _dispatch_call_block_and_release + 16 13 libSystem.B.dylib 0x97921a4c_dispatch_queue_drain + 249 14 libSystem.B.dylib 0x979214a8_dispatch_queue_invoke + 50 15 libSystem.B.dylib 0x979212be_dispatch_worker_thread2 + 240 16 libSystem.B.dylib 0x97920d41_pthread_wqthread + 390 17 libSystem.B.dylib 0x97920b86 start_wqthread + 30 ) 「NSException」のインスタンスをスローした後に呼び出される終了
私の構文は@try @catch
間違っていますか?@catch
ブロックを追加しようとしましNSRangeException
たが、それは正しいアプローチではないようです (クラスではありません)。
また、サーバーエラーは、整数の代わりに[ratable getRemoteId]
返されることがあるために発生します。(null)
この動作はかなり予測不可能に思えます。ObjectiveResource
なぜそれをしているのかもしれないという手がかりがあれば、それは役に立ちます。しかし、私はまだ使用方法を知りたい@try @catch
です。