1

我正在尝试将某种错误处理合并到 iOS 应用程序中。在阅读了 try/catch 块并不是很好的做法之后,我现在正在查看 NSURLConnection 的 &error 输出参数。我试图传递对 NSError 的引用,然后我继续通过链向下传递它。

第一个函数调用我的 DAL 中的一个方法:

NSError *error = nil;
SearchResult *res = [db getHereditaments:&error];
if (error) {
    [self performSelectorOnMainThread:@selector(DisplayError:) withObject:error waitUntilDone:NO];
    //todo: handle error
} else {
    [self performSelectorOnMainThread:@selector(DisplayResults:) withObject:res waitUntilDone:NO];
}

然后第二种方法(称为)尝试传递错误。这工作正常,直到我添加了对 NSError 是否为 nil 的检查,并且在这种情况下返回了数据,那么为什么还会返回错误呢?

调用的方法是:

    -(SearchResult *) getData:(NSError**)error {
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *userName  = [prefs stringForKey:UsernameKey];
NSString * password =  [prefs stringForKey:PasswordKey];

NSURL *url = [UrlUtility getSearchResults:userName passwordHash:password];
CXMLDocument *responseObj = [UrlUtility xmlDocWithUrl:url onError:&error];
if(error ==nil){// should be nil if the connection was successful shouldn't it?
4

1 回答 1

2

好的,首先,如果您在链中传递相同的错误,则需要将 &*error 传递给方法。

其次,如果您完全处理错误指针,您通常希望处理 *error 而不是错误。

第三,你永远不应该检查error == nil。您应该检查 responseObj == nil。如果这是真的,那么你可以使用错误,如果不是,那么你不应该有错误。

最后,与主题不完全相关但应该可以帮助您作为开发人员,您不应该在方法名称的开头使用“get”。Get 仅用于通过引用返回各种值,您通常应该避免这种情况。您的方法可能应该类似于 downloadSearchResultsWithError: 和 URLForSearchResultsWithUsername:password:

于 2011-07-26T08:44:49.527 回答