【问题标题】:Getting a null value in the NSMutableArray在 NSMutableArray 中获取空值
【发布时间】:2012-08-27 07:52:00
【问题描述】:

我的程序包含三个文本字段,我将数据插入到 sqlite 数据库中。现在我正在尝试在 tableview 中显示数据库中的数据。为此,我尝试将数据添加到 NSMutableArray 中并尝试打印它。但它在数组中显示一个空值。我不知道为什么我得到一个空值。 cont 是 NsMutableArray。

    [cont addObject:name.text];
    [cont addObject:address.text];
    [cont addObject:phone.text];

    NSLog(name.text);
    NSLog(address.text);
    NSLog(phone.text);

    int length= sizeof(cont);


    NSString *strlen = [NSString stringWithFormat:@"%d", length];
    NSLog(strlen);

    for(int i=0;i<strlen;i++)
    {
        NSArray *arr = [cont objectAtIndex:i];

        NSString *u = [NSString stringWithFormat:@"%d",i];
        NSLog(u);
        NSLog(arr);

    }

我总是在 arr 中得到长度为 4 和空值。谁能告诉我为什么会这样?我知道代码中一定有错误。

【问题讨论】:

  • 不要用sizeof()来获取数组的长度,使用length方法。 sizeof(ANY_OBJECT) 只会返回您平台的 sizeof(void*)
  • 检查你的数组是否已分配
  • @Arshad 是的。我已包含以下代码: NSMutableArray * cont=[[NSMutableArray alloc]init];

标签: iphone ios5 sqlite nsmutablearray


【解决方案1】:

使用

int length=[cont count];
       //array  count 

而不是

int 长度= sizeof(cont);

并参考该链接

Size of NSArray

示例

NSMutableArray * cont=[[NSMutableArray alloc]init];

    [cont addObject:@"1"];
    [cont addObject:@"ddg"];
    [cont addObject:@"ggg"];

    for(int i=0;i<[cont count];i++)
    {
        NSLog(@"Index %d",i);
        NSLog(@" Object %@",[cont objectAtIndex:i]);
    }
    [cont release];

【讨论】:

  • 是的,我用过这个 [cont count] 但我的长度为零。为什么会这样?
  • @user1626972 检查 NSLog(@"%@",cont);
  • 没什么..我得到的输出为 ( ) 。
  • 您的数组对象未正确添加。检查我编辑的答案
  • 好的,我明白了。但是有一个问题。每次我将不同的值赋予文本字段时,索引 0,1 和 2 处的值都会被覆盖。但我希望索引为增加了。意思是下次我提交另一个值时,该值必须保存在索引 3 等处。你能告诉我怎么做吗?
【解决方案2】:
int length= sizeof(cont);

使用 int length= [cont count]; 而是

sizeof(*) 运算符返回指向 NSMutableArray 的指针的大小。

[cont count];

返回数组中元素的个数。

您在 arr 中得到 Null,因为您将字符串 [cont objectAtIndex:i] 提取到 NSArray NSArray *arr

使用NSString *arr = [cont objectAtIndex:i];

【讨论】:

  • 是的,我以前使用过 [cont count]。但是我的长度为零并且还出现以下错误数组是:0 2012-08-27 14:32:16.901 db [925:f803] ***由于未捕获的异常'NSRangeException'而终止应用程序,原因:'* ** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array' 你能告诉我为什么我收到这个错误吗?感谢您的回复
  • 首先分配并初始化 NSmutableArray。然后尝试将简单的字符串(不是来自文本框)添加到数组中并检查是否仍然出现错误。修改后数组仍然为空。尝试获取字符串中的文本框值,然后添加到数组中。
  • 我明白了。但是有一个问题。每次我为文本字段提供不同的值时,索引 0,1 和 2 处的值都会被覆盖。但我希望增加索引.表示下次我提交另一个值时,该值必须保存在索引 3 处,依此类推。我将在下面发布代码:-
  • cont=[[NSMutableArray alloc]init]; NSString *Name = name.text; NSString *地址=地址.文本; NSString *Phone = phone.text; [续添加对象:名称]; [续添加对象:地址]; [续添加对象:电话]; for(int i=0;i
  • 在 viewDidLoad 或操作方法之前的任何其他地方初始化 cont 数组。每次输入文本框值时,数组都会初始化并添加 3 个对象。并更改 NSArray *arr = [cont objectAtIndex:i ]; line to 'NSString' *arr = [cont objectAtIndex:i];....希望这次能有所帮助........:)
【解决方案3】:
[cont addObject:phone.text];

您正在添加NSString

NSArray *arr = [cont objectAtIndex:i];

而您正在尝试提取 NSArray

获取数组大小的一个好习惯是使用其count 属性,而不是sizeof

【讨论】:

    【解决方案4】:

    试试这个,因为你打印的是一个数组而不是索引处的值::

    for(int i=0;i<strlen;i++)
    {
        NSLog(@"%@", [cont objectAtIndex:i]);
    }
    

    【讨论】:

      【解决方案5】:

      您应该使用[cont count] 而不是sizeof(cont)

      然后...你分配 + 初始化你的 NSMutableArray 了吗?

      cont = [[NSMutableArray alloc] init];
      

      而这一行是错误的:

      NSArray *arr = [cont objectAtIndex:i];
      

      应该是

      NSString *arr = [cont objectAtIndex:i];
      

      【讨论】:

      • 是的,我以前使用过 alloc 和 [cont count]。但我仍然将长度设为零并且还出现以下错误数组是:0 2012-08-27 14:32:16.901 db[925:f803] *** 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“ *** -[__NSArrayM objectAtIndex:]: 索引 0 超出范围为空数组'
      【解决方案6】:

      不知道你的错误在哪里,但是要在objective-c中遍历un数组,你应该使用forin循环。

      for (NSString* value in cont) {
          NSString *u = [NSString stringWithFormat:@"%d",i];
          NSLog(u);
      }
      

      【讨论】:

      • 感谢您的回复。 :)
      【解决方案7】:
       NSString *strlen = [NSString stringWithFormat:@"%d", length];
      

      strlen 只是一个 NSString,但你试图将它用作在线整数:

       for(int i=0;i<strlen;i++)
          {
             ...
      
          }
      

      你应该这样使用它:

      for(int i=0;i<[strlen intValue];i++)
              {
                 ...
      
              }
      

      [strlen intValue] 会给你正确的结果。 祝你好运。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-13
        • 2013-09-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多