我将“return”放在引号中,因为我不想从字面上返回它。我想这样做类似于您将指针传递给[NSString stringWithContentsOfFile:usedEncoding:error:]
.
我想让parseFiles:error
return nil 并让传入的错误引用包含第一个或第二个错误,具体取决于哪个错误。这似乎是一种可可的方式来做到这一点?
编辑:对不起,我应该更清楚我在哪里遇到问题。如果第一条路径是虚假的,它会按我的意愿运行。(我在外面得到错误实例并打印出来。)如果第一个路径是合法的,正如下面的填充字符串所暗示的那样,我得到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