1

iOSの一部が表示されることがあります-Objective-CコードはTry/Catch構造を使用します。

たとえば、次の例から:http ://docs.xrtml.org/2-1-0/pubsub/ios/ortcclient.html

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Instantiate OrtcClient
    ortcClient = [OrtcClient OrtcClientWithConfig:self];

    // Post permissions
    @try {
        NSMutableDictionary* myPermissions = [[NSMutableDictionary alloc] init];

        [myPermissions setObject:@"w" forKey:@"channel1"];
        [myPermissions setObject:@"w" forKey:@"channel2"];
        [myPermissions setObject:@"r" forKey:@"channelread"];

        BOOL result = [ortcClient saveAuthentication:@"http://ortc-developers.realtime.co/server/2.1/" isCLuster:YES authenticationToken:@"myAuthenticationToken" authenticationTokenIsPrivate:NO applicationKey:@"myApplicationKey" timeToLive:1800 privateKey:@"myPrivateKey" permissions:myPermissions];

        if (result) {
            // Permissions correctly posted
        }
        else {
            // Unable to post permissions
        }
    }
    @catch (NSException* exception) {
        // Exception posting permissions
    }

    // Set connection properties
    [ortcClient setConnectionMetadata:@"clientConnMeta"];
    [ortcClient setClusterUrl:@"http://ortc-developers.realtime.co/server/2.1/"];

    // Connect
    [ortcClient connect:@"myApplicationKey" authenticationToken:@"myAuthenticationToken"];
}

saveAuthentication:isCLuster:authenticationToken:...なぜそのような構造を使用するのですか?「通常の」Cocoa-TouchコードのようにメソッドからのNSError(間接)リターンをチェックするだけではいけませんか?たとえば、JSONを読み取る場合:

NSError *error = nil;
id result = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];

if (error == nil){
    NSLog(@"%@", result);
}else{
    NSLog(@"%@", [error localizedDescription]);
}
4

2 に答える 2

3

回復できない、またはcrashなどの未定義の動作につながる可能性がある状態が予想される場合は try catch を使用し、json オブジェクトや xml からの間違った値など、回復可能なエラーが予想される場合はNSError を使用します。

例外プログラミングに関するApple のドキュメントを参照できます。

于 2012-10-18T09:31:29.433 に答える
0

一般に、try-catchはより堅牢であり、テストする場所(ブロックの場合もあります)の正確な位置を定義する必要がなく、例外に関する情報を提供します。

于 2012-10-18T09:30:26.610 に答える