将 Json 添加到可变数组会导致崩溃

Posted

技术标签:

【中文标题】将 Json 添加到可变数组会导致崩溃【英文标题】:adding Json to mutable array resolves in crash 【发布时间】:2013-11-10 09:19:52 【问题描述】:

大家好,我是 Xcode/ios 开发的新手

我试图将 json 数据添加到可变数组中,这会导致应用程序崩溃 :( 到目前为止,这是我的代码:

if(! [defaults objectForKey:@"Person1"])
    [defaults setObject:[PersonsFromSearch objectAtIndex:index] forKey:@"Person1"];
else

    NSMutableArray *Array = [[NSMutableArray alloc]init];
    id object = [defaults objectForKey:@"Person1"];
    Array = [object isKindOfClass:[NSArray class]] ? object : @[object];
    [Array addObject:[PersonsFromSearch objectAtIndex:index]];//crash here :((
    [Array moveObjectFromIndex:[Array count] toIndex:0];


故障转储:

* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSArrayI addObject:]:无法识别的选择器已发送到实例 0xcb4d380” * 首先抛出调用栈:

这里有什么问题?你能帮我解决这个问题吗

数组包含这个(Json?)


   Address = "\U05d3\U05e8\U05da \U05d4\U05e9\U05dc\U05d5\U05dd 53";
   CellPhone = "052-3275381";
   EMail = "editor@pc.co.il";
   EnglishPerson = "Yehuda Konfortes";
   FaceBookLink = "";
   Fax1 = "03-7330703";
   Fax2 = "";
   FileNAme = "100050.jpg";
   HomeEMail = "";
   HomeFax = "";
   HomePhone1 = "";
   HomePhone2 = "";
   PersonID = 100050;
   PersonName = "\U05d9\U05d4\U05d5\U05d3\U05d4   \U05e7\U05d5\U05e0\U05e4\U05d5\U05e8\U05d8\U05e1";
   Phone1 = "03-7330733";
   Phone2 = "";
   ZipCode = "";
 

【问题讨论】:

这不是一个数组。它是一本字典。你想排序什么?或者您只想将所有值添加到数组中? 我想要这样的对象数组(在排序方面不需要帮助)。我希望 Array[0] 成为 address...。 , 手机...,电子邮件... Array[1] 地址...,手机...,电子邮件... 如果我的数组包含字典,所以我想制作字典数组我希望它是可能的!? 我已经更新了我的答案。但我认为你做错了什么。 我不知道为什么我被否决了这不是一个小问题,而且没有重复,我搜索了它们。 【参考方案1】:

[defaults objectForKey:@"Person1"]; 返回字典而不是数组。 所以你不能使用addObject方法。

UPD 您可以通过使用单个对象创建数组来解决此崩溃。 这是更新的代码:

NSMutableArray *Array = [[NSMutableArray alloc]init];
id object = [defaults objectForKey:@"Person1"];
Array = [object isKindOfClass:[NSArray class]] ? [object mutableCopy] : [@[object] mutableCopy];
[Array addObject:[PersonsFromSearch objectAtIndex:index]];//crash here :((
[Array moveObjectFromIndex:[Array count] toIndex:0];

【讨论】:

任何可能的解决方案? 日志 [defaults objectForKey:@"Person1"];并说出你想做什么。 我想将此对象添加到数组中,以便对其进行排序等,因为数组中有大约 50 个这样的对象,但我只想存储只有 10 个的收藏夹。跨度> 我不知道你添加的是什么,但我仍然在同一行崩溃,你为什么认为它是错误的?我必须交换第 2 行和第 3 行吗? 它崩溃了,因为 index > 0 并且数组只包含 1 个对象。我认为这是错误的,因为 Parson1 应该是数组,但它是字典。【参考方案2】:

NSMutableArray *_arr = [[NSMutableArray alloc]init]; NSDictionary *results = 传递 JSON 值;

[_arr add object:[results objectforkey:@“Address”]]; [_arr 添加对象:[results objectforkey:@“CellPhone”]];

【讨论】:

不,我不想从数据中制作一个数组,我想制作这样的 JSONS 数组。

以上是关于将 Json 添加到可变数组会导致崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Objective C 中形成 JSON 格式的可变数组

无法将元素添加到 kotlin 中可变列表的数组数组

iOS 中 关于 NSUserDefault中存储可变数组的问题

尝试将对象添加到可变数组时发送到实例的无法识别的选择器

如何在tableview的可变数组中存储多个选定的行项

使用数组作为可变参数函数的最后一个命名参数会导致缓冲区欠载吗?