我正在使用适用于 iOS 的 Windows Azure SDK 将二进制文件上传到 Azure Blob 存储。在调试中一切正常,并且当构建直接复制到手机时,但是当它在通过 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 与从手机中提取的崩溃日志相匹配。
有什么想法吗?
最佳答案
这可能是因为 Azure 框架未正确链接到您在为设备而不是模拟器构建时使用的构建配置。由于这是类别方法的问题,因此问题可能是 known bug在 x86_64 或 ARM 上链接时。如果是这种情况,请尝试将 -ObjC -all_load
添加到其他链接器标志设置中。
关于ios - NSData dataWithBytesNoCopy 返回错误类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15075684/