Я помещаю «return» в кавычки, потому что я не хочу буквально возвращать его. Я хочу сделать это подобно тому, как вы передаете указатель на указатель для [NSString stringWithContentsOfFile:usedEncoding:error:]
.
Я хотел бы, чтобы parseFiles:error
возвратил ноль и имел ссылку на ошибку, которая была передана, содержит первую или вторую ошибку, в зависимости от того, какая из них была неудачной. Похоже, какао способ сделать это?
РЕДАКТИРОВАТЬ: Извините, я должен был быть более ясным о том, где у меня была проблема. Если первый путь фиктивный, он функционирует так, как я хочу. (Я получаю экземпляр ошибки снаружи, и он печатает.) Если первый путь допустим, как следует из приведенной ниже строки-заполнителя, я получаю EXC_BAD_ACCESS
.
Но теперь я исправил это. Мне нужно сослаться на него как *error
внутри метода parseFiles:error:
и использовать == nil
при проверке, не удалось ли это. Я думал, что мог бы просто if (error)
...
РЕДАКТИРОВАТЬ 2 Хорошо, это не работает. Я получаю EXC_BAD_ACCESS
. Я не уверен, что я делаю не так с условиями, которые проверяют ошибки.
@implementation PassingError
- (id)init {
self = [super init];
NSError *error;
[self parseFiles:@"/untitled.py" error:&error];
if (error != nil) {
NSLog(@"I failed because: %@", error);
}
return self;
}
// Wraps with reading errors.
- (NSString *)parseFiles:(NSString *)path error:(NSError **)error {
NSStringEncoding enc1;
NSString *contents1 = [NSString stringWithContentsOfFile:path
usedEncoding:&enc1 error:*&error];
// there was a read error
// I need an asterisk here...
if (*error != nil) {
// ...and also one here
NSLog(@"FIRST ERROR: %@", *error);
return nil;
}
// here is where you'd do something that might cause another error,
// I'll just try and read a second file for simplicity
NSStringEncoding enc2;
NSString *contents2 = [NSString stringWithContentsOfFile:@"/untitled.py"
usedEncoding:&enc2 error:*&error];
// there was a SECOND error
if (*error != nil) {
NSLog(@"SECOND ERROR: %@", *error);
return nil;
}
// return both or whatever
return [NSArray arrayWithObjects:contents1, contents2, nil];
}
@end