0

私は smtp で写真を送信するプロジェクトに取り組んでいます。最初は自動参照カウントが無効になっていて、プロジェクトは問題なく実行されていました。自動参照カウントを有効にすると、多くのコンパイル エラーが発生しました。最も一般的なものの 1 つは、Objective-C ポインター型 'NSOutputStream*' から C ポインター型 CFWriteStreamRef へのキャスト (別名 'struct_CFWriteStream*' にはブリッジ キャストが必要) でした。

if (CFWriteStreamWriteFully(( CFWriteStreamRef)outputStream, (const uint8_t *)[ehlo  
UTF8String], [ehlo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]) < 0)                       

if (CFWriteStreamWriteFully((__bridge CFWriteStreamRef)outputStream, (const uint8_t *)
[ehlo UTF8String], [ehlo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]) < 0) と書くと

コンパイルはできますが、smtp でメールを送信するために送信ボタンを押すと実行時例外が発生します。この問題を手伝ってもらえないかと思っていました。助けていただければ幸いです。よろしくお願いします。

4

1 に答える 1

0

それが間違った typeCast であることをどのように確認できますか? ストリームが書き込みを行っている限り、[ehlo UTF8String] の所有権を保持するようにしてください。

const UInt8 *buffer = (const UInt8 *)[ehlo UTF8String];
if (CFWriteStreamWriteFully(( CFWriteStreamRef)outputStream, buffer, [ehlo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]) < 0) 

ちなみに、CFWriteStreamWriteFully() 宣言はどこにもありません。CFIndexのみ

CFWriteStreamWrite (
   CFWriteStreamRef stream,
   const UInt8 *buffer,
   CFIndex bufferLength
);

関連はありますか?UInt8 と uint8_t は両方とも unsigned char です。

于 2012-10-24T08:40:54.687 に答える