0

オンライン サーバーが台無しになっても、アプリを正常に続行させたい。@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です。

4

2 に答える 2

-1

あなたはそうしない。このような状況で例外をスローしないようにコードを修正します。

于 2010-08-07T23:08:26.650 に答える