【问题标题】:NSArrayI length]: unrecognised selector sent to instance in JSON Data Parsing [closed]NSArrayI 长度]:在 JSON 数据解析中发送到实例的无法识别的选择器 [关闭]
【发布时间】:2014-12-17 10:25:22
【问题描述】:

我创建了一个包含 JSON 数据的应用程序,我使用的代码如下:

-(void)viewWillAppear:(BOOL)animated
{
[self.webSpinner startAnimating];
NSURL * url=[NSURL URLWithString:[NSString stringWithFormat:@"http://www.janvajevu.com/webservice/specific_post.php?post_id=%@",self.postId]];
dispatch_async(kBgQueue, ^{
    data = [NSData dataWithContentsOfURL: url];
    [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
});
}
-(void)fetchedData:(NSData *)responsedata
{
if (responsedata.length > 0)
{
    NSError* error;
    self.webDictionary= [NSJSONSerialization JSONObjectWithData:responsedata options:kNilOptions error:&error];
    self.webArray=[_webDictionary objectForKey:@"data"];
}
self.headingString=[self.webArray valueForKey:@"post_title"];
NSLog(@"Heading %@",self.headingString);
[self.webSpinner stopAnimating];
self.webSpinner.hidesWhenStopped=TRUE;
}

这里 Self.Webarray 是我的数组,self.headLabel 是我的标签,但是当我运行它时,显示类似“[NSArrayI length]: unrecognised selector sent to instance”的错误。

【问题讨论】:

  • 请告诉self.webArray output.if self.webArray 是数组,那么您应该首先使用objectAtIndex 获取其索引,然后获取valueForKey
  • 检查 self.webArray 是否包含值
  • @ChintaN-Maddy-Ramani self.webArray 就像 { "author_name" = "Parita Handa"; "post_date" = "2014-12-17 13:25:13"; “post_id”=2885; "post_title" = "\U0aaa\U0abe\U0a97\U0ab2\U0aae\U0abe\U0ab8\U0acd\U0aa4\U0ab0"; "post_title_slug" = "%e0%aa%aa%e0%aa%be%e0%aa%97%e0%aa%b2-%e0%aa%ae%e0%aa%be%e0%aa%b8%e0 %ab%8d%e0%aa%a4%e0%aa%b0"; “post_views”= 121; }
  • 那么它的 NSDictionary 不是一个数组。你告诉 webArray 是你的数组,但输出看起来像字典。按照@nburk 的回答。并放置调试点并检查它在哪一行崩溃。

标签: ios objective-c iphone json uilabel


【解决方案1】:

可能是这段代码造成了问题。

-(void)viewDidAppear:(BOOL)animated
{
    self.headLabel.text=[self.webArray valueForKey:@"post_title"];
}

因为[self.webArray valueForKey:@"post_title"] 可能不是字符串值。所以要么检查它是否是字符串值,要么将其转换为字符串值。

 -(void)viewDidAppear:(BOOL)animated
    {
        self.headLabel.text=[NSString stringWithFormat:@"%@",[self.webArray valueForKey:@"post_title"]];
    }

试试这个代码。

【讨论】:

  • 解析我的 Json 数据时它包含 Null 值,那么它如何包含 Null 值?
  • 在设置 headLabel 的文本之前尝试空检查。
  • 如果您的 JSON 数据包含 null 值,则解析后的 JSON 将包含 [NSNull null]。在这种情况下,请查看您收到的错误消息。你有一个数组,你需要一个字符串。
【解决方案2】:

您在代码中的某处调用NSArray 上的实例的length,这就是错误消息告诉您的内容:

NSArrayI length]: unrecognised selector sent to instance

这是因为NSArray 没有名为length 的方法,因此不知道如何对导致应用程序崩溃的命令做出反应。如果您想知道NSArray 中的对象数量,您应该使用count 而不是length

length 用于获取NSString 中的字符数或NSData 中的字节数。 NSArray 是一个collection 类,类似于NSDictionary,用于检索集合中包含的元素数量,必须使用count

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 2015-09-09
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多