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 回答