我有几行简单的代码,如下所示:
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:在使用之前未正确声明/包含
如果 SomeClass 在头文件中前向声明(作为 @class SomeClass)但随后从未包含在实现文件中,则通常会发生第二种情况。
关于iphone - NSString的initWithData :encoding: return type issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/338598/