NSString的initWithData:encoding:返回类型问题

时间:2008-12-03 20:35:40

标签: iphone objective-c cocoa cocoa-touch

我有几行简单的代码,如下所示:

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

问题在于,initWithData:encoding:不会像文档声明的那样返回NSString的实例。我尝试使用(NSString *)进行显式转换,但没有太多运气。当我尝试将stringReply传递给我用类型不匹配编写的方法时,这给了我编译器警告。鉴于我将所有警告视为错误,我真的很想了解返回的是什么是stringReply以及如何将其强制为NSString类型。

2 个答案:

答案 0 :(得分:8)

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

例如,如果您在执行此操作时遇到类型不匹配:

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

问题是 initWithData:encoding:返回错误的类型,但是其中一个:

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

如果SomeClass在头文件中向前声明(如@class SomeClass),但后来从未包含在实现文件中,则经常会发生第二个选项。

答案 1 :(得分:0)

不确定发生了什么,我运行下面的代码并返回了NSString。用nil切换数据也可以正常工作。

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

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

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