【问题标题】:iOS loading external data with JSON -- Segue crashing with error: [__NSCFNumber length]: unrecognized selector sent to instanceiOS 使用 JSON 加载外部数据——Segue 因错误而崩溃:[__NSCFNumber length]: unrecognized selector sent to instance
【发布时间】:2016-07-05 15:33:27
【问题描述】:

我是一般编程新手,尤其是 iOS。另外,这是我第一次在 StackOverflow 上提问。我希望我不会从错误地粘贴代码开始。

在我的应用程序中,我需要将一些 JSON 加载并显示到应用程序中。

我设法按照教程进行调整并适应我的需要,因此我目前可以将数据列表加载到 ListView 中,但在详细信息视图中显示整个帖子时遇到了一些问题。

我有一个用于我的 Post ViewController(列表)的类和另一个用于我的 Details ViewController(详细信息)的类。

到目前为止,这就是代码的问题部分 (PostsViewController):

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([[segue identifier] isEqualToString:@"showDetailView"]) {

        NSIndexPath *ip = [self.tableView indexPathForSelectedRow];

        [[segue destinationViewController] getPost:[postsArray objectAtIndex:ip.row]];

    }
}

它调用的方法在DetaisViewController中:

- (void)getPost:(id)postObject {

    currentPost = postObject;

}

我不知道我做错了什么,直到现在我仍然对 Obj-C、编译器等的内部工作没有那么深刻的理解。

我这样做是为了作为入门级工作的测试,我希望日复一日地学习更多。

另外,整个错误是这样的:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFNumber 长度]:无法识别的选择器发送到实例 0xb000000000000083”

如果我需要提供更多信息,请告诉我,我提前为我的菜鸟道歉。

问候!

【问题讨论】:

  • getPost 这个名字令人困惑。而是setPost。错误消息只是说在某处传递了 NSNumber 对象,而不是预期的 NSString 对象。设置异常断点,找出错误发生的位置。
  • 换句话说,可能在currentPost 的某个地方,您希望某物是一个字符串,它实际上是一个数字(所以它是 JSON 中的一个数字而不是一个字符串)

标签: ios objective-c json storyboard segue


【解决方案1】:

谢谢大家。

这就是问题所在,我有一个 DetailsView 方法可以相应地更改标签。它是这样设置的:

- (void)setLabels {

    lblPostTitle.text = currentPost.postTitle;
    lblPostBody.text = currentPost.postBody;
    lblPostId.text = currentPost.postId;
}

在调试时,我首先尝试对 currentPost.postTitle/Body/Id 进行 NSLog 处理,它成功了。所以我意识到在 JSONplaceholder 中,postID 是一个数字 (http://jsonplaceholder.typicode.com/comments?postId=1)。

所以一旦我处理了这个数字,一切都很好。

- (void)setLabels {

    lblPostTitle.text = currentPost.postTitle;
    lblPostBody.text = currentPost.postBody;

    NSString* pi = currentPost.postId;
    lblPostId.text = [NSString stringWithFormat: @"Post ID: %@", pi];
}

现在它可以工作了!

无论如何,我感谢所有 cmet,并将继续努力避免那些菜鸟的错误!

亲切的问候!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多