NSData dataWithBytesNoCopy返回错误的类型?

时间:2013-02-25 20:16:31

标签: ios objective-c azure

我正在使用Windows Azure SDK for iOS将二进制文件上传到Azure Blob存储。在Debug中一切正常,当构建直接复制到手机时,但是当它在通过TestFlight发出的AdHoc构建上运行时,我得到了这个例外:

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

现在Azure SDK在NSData上的类别中定义dataWithBase64DecodedString,并且在此代码块中发生异常:

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 个答案:

答案 0 :(得分:2)

这可能是因为在构建设备而不是模拟器时,Azure框架没有正确链接到您使用的构建配置。由于这是类别方法的问题,因此在x86_64或ARM上链接时问题可能是known bug。如果是这种情况,请尝试将-ObjC -all_load添加到其他链接标记设置。