2015-10-26 55 views
2

根據the docs應該始終調用指定的初始化程序,但是當我嘗試獲取沒有權限的血型用戶時,創建了NSError,但其指定的初始化程序(- [NSError initWithDomain:code:userInfo:])爲從未打過電話爲什麼不調用指定的初始化程序

我正在使用的代碼是:

HKHealthStore *healthStore = [[HKHealthStore alloc] init]; 
HKBloodTypeObject *bloodType = [healthStore bloodTypeWithError:&error]; 
NSLog(@"Blood type: %@, error: %@", bloodType, error); 

觀測值:我知道,指定初始化不被調用,因爲我已經攪和了。其他方法,如- [NSFileManager contentsOfDirectoryAtPath:error:]表現得如預期。

爲什麼會發生?我錯過了什麼嗎?我應該打開雷達嗎?

+0

什麼是你想通過交叉混合的NSError初始化的方法來完成? – Allan

+0

自動錯誤日誌:[https://github.com/fpg1503/FPGSilentLogger](https://github.com/fpg1503/FPGSilentLogger) – fpg1503

回答

2

當錯誤被通過像HealthKit一個框架,其大部分工作的進程外還給你,很可能是那些獲得返還給您的錯誤已經在另一個進程中被實例化,然後在XPC交付。這意味着您在進程中獲得的NSError實際上是由NSXPCConnection使用NSSecureCoding重建的。如果你看看NSCoding協議,你會注意到initWithCoder:也是一個僞指定的初始化程序。實現NSCodingNSSecureCoding的任何類都具有initWithCoder:作爲可以調用的附加指定初始化方法,而不是其他指定的初始化方法。

+0

完美,謝謝:) – fpg1503

+0

是否還有其他「僞指定的初始化」?這不會破壞首先有一個指定的初始化程序?我發現它的'initWithCoder:'方法初始化是爲了符合'NSCoding'而創建的,它不應該調用' - [NSError initWithDomain:code:userInfo:]'而不是' - [NSObject init] 「那麼? – fpg1503

相關問題