它是在編寫Objective-c方法時添加錯誤輸出參數的常見模式。
據我知道這是你如何創建,如果事情是錯誤的返回錯誤的方法:Objective-c將錯誤參數傳遞給內部方法
- (void)doSomethingWithObj:(id)obj error:(NSError *__autoreleasing *)error {
BOOL success = NO;
// do somthing...
if (!success) {
*error = [NSError errorWithDomain:@"the.domain" code:0 userInfo:nil];
}
}
現在有很多時候你只是想這個錯誤的參數,以反映在其他一些方法中出錯您在方法內部使用,讓說:
- (void)fetchObjectInContext:(NSManagedObjectContext *)context error:(NSError *__autoreleasing *)error {
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SomeObject"];
NSArray *results = [context executeFetchRequest:request error:nil];
}
所以我想好了,我就傳遞錯誤參數裏面的方法,就像這樣:
- (void)fetchObjectInContext:(NSManagedObjectContext *)context error:(NSError *__autoreleasing *)error {
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SomeObject"];
NSArray *results = [context executeFetchRequest:request error:error];
if (error) {
NSLog(@"error %@", error);
}
}
但是這種方法有兩個問題:
1.即使沒有錯誤,if (error)
檢查返回YES
。
2.日誌行生成此警告:Format specifies type 'id' but the argument has type 'NSError *__autoreleasing *'
那麼我在這裏做錯了什麼?