我有几行简单的代码,例如:
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类型。
最佳答案
当您尝试在另一个位置使用stringReply时,来自编译器的“类型不匹配”与从initWithData:encoding:返回的对象无关,并且与随后使用stringReply的情况有关。
例如,如果在执行此操作时遇到类型不匹配:
SomeClass *someObject;
NSString *stringReply;
stringReply = [[NSString alloc] initWithData:dataReply encoding:NSUTF8StringEncoding];
[someObject methodWithString:stringReply];
问题不在于initWithData:encoding:返回错误的类型,而是以下之一:
methodWithString:实际上并不需要NSString *
methodWithString:在使用之前未正确声明/包含
如果在头文件(如@class SomeClass)中预先声明SomeClass,但随后从未将其包含在实现文件中,则通常会发生第二种选择。