一部のデータをデコードしようとしていますが、データが 520,000 (バイトですか?) を超えると[data length]
、アプリがデバッガーでCCCrypt
ライン上でクラッシュするか、デバッガーから切り離された場合、フリーズして実際には適切にクラッシュしません (Spinner は回り続けます)しかし、アプリは完全にフリーズします)。
これは私の解読コードです:
char *key = ENCRYPTION_KEY;
NSUInteger dataLength = [data length];
uint8_t unencryptedData[dataLength + kCCKeySizeAES128];
size_t unencryptedLength;
CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionECBMode, key, kCCKeySizeAES128, NULL, [data bytes], dataLength, unencryptedData, dataLength, &unencryptedLength);
NSData *output = [[NSData alloc] initWithBytes:unencryptedData length:unencryptedLength];
return output;
編集 - - - - -
以下の Hejazi の回答に従って、私はこれを持っていますが、まだ機能しません:(
- (NSData *)decodeSnapDataInBackground:(NSData *)data
{
char *key = ENCRYPTION_KEY;
NSUInteger dataLength = [data length];
uint8_t unencryptedData[dataLength + kCCBlockSizeAES128];
size_t unencryptedLength;
size_t unencryptedDataLength = dataLength + kCCBlockSizeAES128;
CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionECBMode, key, kCCKeySizeAES128, NULL, [data bytes], dataLength, unencryptedData, unencryptedDataLength, &unencryptedLength);
NSData *output = [[NSData alloc] initWithBytes:unencryptedData length:unencryptedLength];
return output;
}
編集2 -----
バックグラウンド スレッドでデコードを実行すると、この問題が発生するようです。私はこれを使用していました:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
削除すると、大きなデータ ブロックを正常にデコードできるようになりました。
これはなぜですか?バックグラウンド スレッドで動作させる方法はありますか?
ありがとう