0

我正在做一个用 smtp 发送照片的项目。一开始,自动引用计数被禁用,项目运行没有问题。当我启用自动引用计数时,我遇到了很多编译错误。最常见的一种是将 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

你怎么能确定这是一个错误的类型转换?只要流正在写入,请尝试保留 [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 都是无符号字符。

于 2012-10-24T08:40:54.687 回答