2

flickr API を統合して、iPhone アプリケーションから画像を flickr サイトにアップロードしたいと考えています。github からコード snap&Run をダウンロードしました。プロジェクトに同じ SDK コードを統合しましたが、ARC への変換中にエラーが表示されます。私は行の問題を読んでいました。これらのエラーは OFUtilities.m ファイルにあります

  static NSData *OFSha1(NSData *inData)
{
NSMutableData *result = [NSMutableData dataWithLength:CC_SHA1_DIGEST_LENGTH];
CC_SHA1_CTX context;
CC_SHA1_Init(&context);
CC_SHA1_Update(&context, [inData bytes], (CC_LONG)[inData length]);
CC_SHA1_Final([result mutableBytes], &context);
return result;
}

上記の方法で、「呼び出し CC_SHA1_Final に一致する関数がありません」というエラーが表示されます

NSString *OFHMACSha1Base64(NSString *inKey, NSString *inMessage)
{
NSData *keyData = [inKey dataUsingEncoding:NSUTF8StringEncoding];

if ([keyData length] > CC_SHA1_BLOCK_BYTES) {
    keyData = OFSha1(keyData);
}

if ([keyData length] < CC_SHA1_BLOCK_BYTES) {
    NSUInteger padSize = CC_SHA1_BLOCK_BYTES - [keyData length];

    NSMutableData *paddedData = [NSMutableData dataWithData:keyData];
    [paddedData appendData:[NSMutableData dataWithLength:padSize]];
    keyData  = paddedData;
}

NSMutableData *oKeyPad = [NSMutableData dataWithLength:CC_SHA1_BLOCK_BYTES];
NSMutableData *iKeyPad = [NSMutableData dataWithLength:CC_SHA1_BLOCK_BYTES];

const uint8_t *kdPtr = [keyData bytes];
uint8_t *okpPtr = [oKeyPad mutableBytes];
uint8_t *ikpPtr = [iKeyPad mutableBytes];

memset(okpPtr, 0x5c, CC_SHA1_BLOCK_BYTES);
memset(ikpPtr, 0x36, CC_SHA1_BLOCK_BYTES);

NSUInteger i;
for (i = 0; i < CC_SHA1_BLOCK_BYTES; i++) {
    okpPtr[i] = okpPtr[i] ^ kdPtr[i];
    ikpPtr[i] = ikpPtr[i] ^ kdPtr[i];
}

NSData *msgData = [inMessage dataUsingEncoding:NSUTF8StringEncoding];

NSMutableData *innerData = [NSMutableData dataWithData:iKeyPad];
[innerData appendData:msgData];
NSData *innerDataHashed = OFSha1(innerData);

NSMutableData *outerData = [NSMutableData dataWithData:oKeyPad];
[outerData appendData:innerDataHashed];

NSData *outerHashedData = OFSha1(outerData);


size_t outputLength;
char *outputBuffer = NewBase64Encode([outerHashedData bytes], [outerHashedData length], true, &outputLength);

NSString *result = [[[NSString alloc] initWithBytes:outputBuffer length:outputLength encoding:NSASCIIStringEncoding] autorelease];
free(outputBuffer);
return result;
}

ここで、「型 'const uint8_t' 型の変数を型 const 値の r 値で初期化できません」というエラーが発生しました

私を助けてください。ありがとうございます。

4

1 に答える 1

1

非アークコードからアークコードへの変換が うまくいかないことがあります。外部フレームワークが ARC をサポートしていない場合は、変換を試みない方がよいでしょう。代わりに、その特定のファイルにコンパイラ フラグ -fno-objc-arcを設定して、ARC なしでコンパイルします。

于 2013-05-17T09:25:46.043 に答える