我正在使用最新的SDK开发iPhone应用程序。
我有这段代码:
-(void) connectionDidFinishLoading:(NSURLConnection *) connection
{
NSError* error = nil;
NSObject* response =
[NSJSONSerialization JSONObjectWithData:webData
options:NSJSONReadingMutableContainers
error:&error];
if ([response isKindOfClass:[NSArray class]])
{
NSDictionary* resp = [response objectAtIndex:0];
这一行NSDictionary* resp = [response objectAtIndex:0];
不起作用。我收到此编译时错误:No visible @interface for 'NSObject' declares the selector 'objectAtIndex:'
。
我可以这样做:
NSArray* array = [NSArray initWithArray:response];
但我认为它会创建两个对象并且会浪费资源。
如何将NSObject强制转换为NSArray?
答案 0 :(得分:2)
此tutorial解释了我必须使用id response =
代替NSObject* response =
的原因。
如果我使用id
,我可以向response
对象发送任何消息。
所以,如果我检查[response isKindOfClass:[NSArray class]]
是否[response objectAtIndex:0]
,那么{{1}}就不会有任何问题。
而且,它不会是任何编译时错误。
我添加了这个答案,因为会有更多人遇到同样的问题。
答案 1 :(得分:1)
这应该有效:
-(void) connectionDidFinishLoading:(NSURLConnection *) connection
{
NSError* error = nil;
NSObject* response =
[NSJSONSerialization JSONObjectWithData:webData
options:NSJSONReadingMutableContainers
error:&error];
if ([response isKindOfClass:[NSArray class]])
{
NSArray *responseArray = (NSArray*)response;
NSDictionary* resp = [responseArray objectAtIndex:0];
答案 2 :(得分:0)
试试这个:
NSDictionary* resp = [((NSArray *)response) objectAtIndex:0];
希望它有效