2008-12-03 59 views
2

我有一对夫妇的琐碎行代码如下所示:的NSString的initWithData:编码:返回类型问题

NSData *dataReply; 
NSString *stringReply; 
dataReply = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
stringReply = [[NSString alloc] initWithData:dataReply encoding:NSUTF8StringEncoding]; 

这里的问题是,initWithData:编码:不为返回的NSString的一个实例文件声称它。我试过使用(NSString *)进行明确的演员,但没有多少运气。当我尝试将stringReply传递给我用类型不匹配编写的方法时,这给了我编译器警告。鉴于我将所有警告视为错误,我真的很想了解stringReply返回的是什么以及如何强制它成为NSString类型。

+0

你真的必须向我们展示原型,并调用你写的方法,以及实际的警告,以获得有用的答复。这几乎可以肯定问题在哪里,而不是你发布的代码。 – 2008-12-03 20:53:12

回答

0

不知道发生了什么事,我运行下面的代码并返回了一个NSString。用nil交换数据也可以。

const char* os = "12345"; 
NSString* str = [[NSString alloc] initWithData:[NSData dataWithBytes:os length:5 ] encoding:NSUTF8StringEncoding]; 
NSLog(@"%@", str); 

如果调试它,你可以告诉正在创建什么类型的对象?

如果发布编译器警告可能会有所帮助。

8

当您尝试在另一个位置使用stringReply时,编译器中的“类型不匹配”与从initWithData:encoding返回的对象无关:以及随后stringReply随后被使用的所有内容。

例如,如果你得到一个类型不匹配,当你这样做:

SomeClass *someObject; 
NSString *stringReply; 
stringReply = [[NSString alloc] initWithData:dataReply encoding:NSUTF8StringEncoding]; 
[someObject methodWithString:stringReply]; 

问题是是initWithData:编码:将返回错误的类型,但之一:

  • methodWithString:实际上不需要NSString *
  • methodWithString:在使用前未正确声明/包含

如果SomeClass在头文件中作为@class SomeClass前向声明,但从未包含在实现文件中,则通常会发生第二种选择。