【问题标题】:Adding string to an array将字符串添加到数组
【发布时间】:2011-04-28 12:53:59
【问题描述】:


我想知道如何将字符串添加到数组中。
我使用了以下方法,但它显示null

1) [arrData addObject:[NSString stringWithString:strlast]];
2) [arrData addObject:strlast];

提前致谢

【问题讨论】:

  • 如果你的arrData 是一个有效的 NSMutableArray,那么你的代码是绝对正确的。您需要提供更多背景信息。 (数组创建、对象添加、对象检索等)
  • 什么显示“空”? ,你看起来还可以(两个选项)
  • 你在检查 strlast 的值吗?
  • @Guy 它必须是 arrData 因为将 nil 对象添加到数组会导致异常。
  • arrData 是一个 NSmutable 数组变量,我已将其声明为 extern const 而 strlast 是 NSMutableString

标签: iphone objective-c nsstring nsarray


【解决方案1】:

一旦创建了 NSArray,就不能再向它添加任何东西。如果要对其进行更改,则需要使用 NSMutableArray。

更新:您实际上可能有两个问题。

  1. 在需要可变性时使用 NSArray 而不是 NSMutableArray。

  2. 未初始化数组对象(任何一种)。如果 arrData 为 nil,您可以愉快地发送任意数量的消息。什么都不会发生。

【讨论】:

  • 当他得到nil(也不例外)时,他的整个数组更有可能是nil(参见bbum/Joe的答案)。
【解决方案2】:

如果它显示为 null (nil),您需要确保在尝试 addObject: 之前在代码中的某处设置了 arrData

arrData = [[NSMutableArray alloc] init];

strlast 也是一个字符串,所以请使用第二个示例,第一个示例毫无意义。

[arrData addObject:strlast];

【讨论】:

  • 为什么是[[NSMutableArray array] retain];?为什么不直接使用[[NSMutableArray alloc] init];
  • 只是我输入的第一件事然后添加了一个保留,我可以更改以防止不必要的自动释放对象。
  • 是的,技术上没关系。但对于这个也无所谓:int i = 1 - 1 + 1;。然而有点没有意义,不是吗? (在内部基本上相当于[[NSMutableArray array] retain])。为了风格,我总是走不那么臃肿的方式。特别是因为 OP 对 ObjC 来说似乎有点新。对于非新手来说,真正关心它真的不够重要。
  • 是的,我同意我作弊并编辑了我的评论和答案,而您提出了一个很好的例子,说明我是多么愚蠢地保留了一个数组:),并且影响大于 int i = 1 - 1 + 1;必须将数组添加到自动释放池中,进行跟踪,然后无缘无故释放,这比简单的子调用要多得多的 cpu 周期。
  • 好吧,自动释放相当便宜,但在EXC_BAD_ACCESS 调试的情况下增加了不必要的复杂性(自动释放池推迟了代码故障)。而int i = 1 - 1 + 1; 基本上没有开销,因为编译器无论如何都会对其进行优化。 ;) 任何。 (哦,我并不是要以任何方式称呼你的名字和/或愚蠢的。只是想减少对 OP 的混淆。)祝你有美好的一天,乔。 :)
【解决方案3】:

您是否分配了一个数组并将其分配给 arrData?

【讨论】:

    【解决方案4】:

    试试:

    NSMutableArray *arrData = [NSMutableArray array];
    NSString *string = @"My string";
    [arrData addObject:string];
    NSLog(@"%@", [arrData objectAtIndex:0]); //logs "My string"
    

    【讨论】:

    • NSString *string = [[NSString alloc]initWithString:@"My string"]; 毫无意义。就做NSString *string = @"My string";
    【解决方案5】:

    如果你使用的是非可变数组,你也可以使用 arrayByAddingObject:

    arrData = [arrData arrayByAddingObject: strlast];
    

    但可变数组可能是一个更好的主意。

    【讨论】:

      猜你喜欢
      • 2012-12-15
      • 2011-04-03
      • 2015-02-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      相关资源
      最近更新 更多