2013-02-25 134 views
1

我正在使用適用於iOS的Windows Azure SDK將二進制文件上載到Azure Blob存儲。一切都在調試工作正常,當構建直接複製到手機上,但是當它運行在通過TestFlight發出了即席構建,我得到這個異常:NSData dataWithBytesNoCopy返回錯誤的類型?

NSInvalidArgumentException: -[__NSCFConstantString dataWithBase64DecodedString]: unrecognized selector sent to instance 

現在在Azure SDK定義dataWithBase64DecodedString在一個類別在NSData的,而在這個代碼塊中出現異常:

void* buffer=malloc(CC_SHA256_DIGEST_LENGTH); 
CCHmac(kCCHmacAlgSHA256, [cKey bytes], [cKey length], [contentData bytes], [contentData length], buffer); 
NSData *encodedData = [NSData dataWithBytesNoCopy:buffer length:CC_SHA256_DIGEST_LENGTH freeWhenDone:NO]; 
contentMD5 = [encodedData stringWithBase64EncodedData]; /* exception is on this line */ 
free(buffer); 

正如你所看到的,encodedData應該是一個NSData。有時候是這樣。但是,一旦編譯完成並在手機上遠離我的調試器,就不是那麼多。 Airbrake匹配從手機中拉出的故障記錄。

任何想法?

+1

我猜想當它出於某種原因失敗時使用的構建配置與azure SDK框架 – 2013-02-25 20:27:57

+0

沒有正確鏈接,事實證明你是正確的......將-ObjC -load_all標誌添加到鏈接器中修復了它。他們在調試但不是Release.if你添加這個作爲答案,我會接受! – 2013-02-26 01:46:45

+0

不錯,我已經添加了一個答案和一些更多的細節(如果我在某些方面不正確,評論)。另外我假設你的意思是'-all_load'而不是'-load_all'? – 2013-02-26 17:29:52

回答

1

這可能是因爲Azure框架未正確鏈接到構建設備而不是模擬器時使用的構建配置。由於這是類別方法的問題,因此在x86_64或ARM上進行鏈接時,問題可能是known bug。如果是這種情況,請嘗試將-ObjC -all_load添加到其他鏈接器標誌設置。