【问题标题】:No visible @interface for 'NSMutableArray' declares the selector 'getObjectAtIndex:''NSMutableArray' 没有可见的@interface 声明选择器'getObjectAtIndex:'
【发布时间】:2017-07-21 08:02:31
【问题描述】:

我正在制作这个从 url 获取一些数据的应用程序(审查)。问题是我没有找到获取 PHP 脚本回显的解决方案。

从该脚本返回的正常数组如下所示:

{"user_data":  {"id":"78","image":"https://www.i********p.com/uploads/ideas/fun/2017/03/28/78.jpg","idea":"Join Facebook groups related to your passions or hobbies and meet friends.","owner_ID":"1","owner":"Eduard","owner_photo":"https://www.i********p.com/uploads/members/1/1.png","rating":"4","reviews":"1 review","msg":"success"}}

问题是如何使用 Objective-c(没有循环)从“user_data”访问这个数组的每个值?

Objective-c 代码:

- (void)getJSON {
NSError *error;
NSString *url_string = [NSString stringWithFormat: @"https://www.app.i******o.com/getidea.php?topic=%@", ideasTopic];
NSData *data = [NSData dataWithContentsOfURL: [NSURL URLWithString:url_string]];
NSMutableArray *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

if (error) {
    NSLog(@"Something went wrong: %@", error);
} else {
    NSLog(@"json: %@", json);
    NSLog(@"IMAGE: %@", [[json getObjectAtIndex:0] getObjectForKey:@"image"]);
}}

【问题讨论】:

  • [[json getObjectForKey: "user_data"] getObjectForKey:@"image"] 告诉我错误是什么
  • 同样的错误,但这次是针对 'getObjectForKey'
  • NSArrayNSMutableArray的任意索引处获取任意对象的实例方法是objectAtIndex:。您在方法名称之前使用了一个额外的 get。但是,您的json 被反序列化为NSDictionaryobjectAtIndex 将无法访问。请参阅下面的答案。
  • 我试过这个没有构建问题,控制台告诉我无法识别的选择器实例。代码:NSLog(@"IMAGE: ℅@", [[json objectAtIndex:0] objectForKey:@"image"]);
  • 首先将您的json 变量类型更改为NSDictionary,然后访问您的数据,例如:json[@"user_data"][@"image"]

标签: ios objective-c json xcode


【解决方案1】:

Objective-C 支持字面量版本来访问字典。您可以使用键直接访问值。

NSString *imageUrl = json[@"user_data"][@"image"];

您的json 是一本字典。 json[@"user_data"] 返回一个包含键和值的字典。您可以通过相应的键访问此字典的值。 json[@"user_data"][@"image"] 为您提供相应键所需的值。

编辑: 您还需要将json 变量类型更改为NSDictionary

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

【讨论】:

  • 不,就像它告诉我在字符串之前添加@。在尖叫之后:在“NSMutableArray *”类型的对象上找不到读取字典元素的预期方法
  • 对不起,我跳过了@。在您提供的示例 json 中,没有数组。它似乎是字典词典。请检查您的回复并告诉我。
  • 嗯,最终的回显 PHP 脚本如下所示: $reponse = array("id"=>"$idea_ID","image"=>"$image",..etc); echo json_encode(array("user_data"=>$response));exit();
  • PanameraTurboS 正如@nyem 所指出的,您需要将 json 更改为 NSDictionary。您已将其声明为 NSMutableArray 因此出现错误。
【解决方案2】:

您提供的 JSON 文本被反序列化为 NSDictionary 对象(您可以通过查找示例中的 json 变量的类来自行检查)。

所以要得到你想要的(例如图片),你只需写

json["user_data"]["image"]

【讨论】:

  • 我试过了:索引表达式无效,因为下标类型'char *'不是Objective-C指针
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 2021-09-22
相关资源
最近更新 更多