文字通り返したくないので、「返す」を引用符で囲みます。にポインターからポインターへのポインターを渡す方法と同様に行いたいと思います[NSString stringWithContentsOfFile:usedEncoding:error:]
。
parseFiles:error
return nil を作成し、渡されたエラー参照に、どちらが失敗したかに応じて、最初または 2 番目のエラーが含まれるようにしたいと考えています。それはCocoaの方法のように思えますか?
編集:申し訳ありませんが、どこで問題が発生したかをもっと明確にする必要がありました。最初のパスが偽物である場合、それは私が望むように機能します。(外部でエラー インスタンスを取得し、出力します。) 最初のパスが正当である場合、以下のフィラー文字列が示すように、EXC_BAD_ACCESS
.
しかし今、私はそれを修正しました。メソッド*error
内で参照し、失敗したかどうかを確認するときに使用する必要があります。私はただできると思った...parseFiles:error:
== nil
if (error)
EDIT 2 OK、うまくいきません。私は得て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