Ios NSInvalidArgumentException';,原因:'-[\uu NSArrayI length:发送到实例的选择器无法识别

Ios NSInvalidArgumentException';,原因:'-[\uu NSArrayI length:发送到实例的选择器无法识别,ios,objective-c,cocoa-touch,uitableview,unrecognized-selector,Ios,Objective C,Cocoa Touch,Uitableview,Unrecognized Selector,当我从谷歌那里寻找答案时,这里的大多数答案都说,你试图在一个不受支持的NSArray上使用长度 这里的问题是我甚至没有在代码中使用任何NSArray或长度 我有一个 NSMutableArray *filteredContent; 其中filteredContent将包含plist中的词典 在为tableView在单元格上写入cell.textlab.text之前,一切都运行良好 通过NSLog检查,内容确实是一个数组 以下是我尝试编写单元格文本的方式: cell.textLabel.t

当我从谷歌那里寻找答案时,这里的大多数答案都说,你试图在一个不受支持的NSArray上使用长度

这里的问题是我甚至没有在代码中使用任何NSArray或长度

我有一个

NSMutableArray *filteredContent;   
其中
filteredContent
将包含plist中的词典

在为
tableView
在单元格上写入
cell.textlab.text之前,一切都运行良好

通过
NSLog
检查,内容确实是一个数组

以下是我尝试编写单元格文本的方式:

cell.textLabel.text=[[self.filteredContent objectAtIndex:indexPath.row] valueForKey:@"recipeName"];
但它给了我错误,所以我将其更改为:

NSString *myValue = [self.filteredContent valueForKey:@"recipeName"];
cell.textLabel.text=myValue;
但是结果是一样的,我不知道我得到了这个错误

进一步详情:

[results addObject:@[recipe]];
这是我创建主数组的地方,然后使用segue
filteredContent=results将其传递到
PageView


编辑:

recipe=arrayOfPlist[i];
where-arrayOfPlist

NSArray *arrayOfPlist = [[NSArray alloc] initWithContentsOfFile:path];
//Output to NSLog(@"FIltered Content :  %@", self.filteredContent);
FIltered Content :  (
        (
            {
                category = main;
                difficultyLevel = "3/5";
                numberOfPerson = 5;
                recipeDetail = "Bulguru koy su koy beklet pisir ye ";
                recipeImage = "nohutlu-pilav.jpg";
                recipeIngredients = "pirinc,tereyag tuz,bulgur";
                recipeName = "Bulgurlu Pilav";
                time = "25 dk";
            }
        ),
        (
            {
                category = main;
                difficultyLevel = "3/5";
                numberOfPerson = 5;
                recipeDetail = "Bulguru koy su koy beklet pisir ye ";
                recipeImage = "nohutlu-pilav.jpg";
                recipeIngredients = "pirinc,tereyag tuz,bulgur";
                recipeName = "Bulgurlu Pilav";
                time = "25 dk";
            }
        )
    )

    2014-04-27 02:47:41.704 deneme2[19820:60b] VALUE IN FILTERED TABLE  is (
        "Bulgurlu Pilav" // this is what i want to write to the cell label and i get it with myValue-look a bit above
    )

根据数据的输出,您在其中有一个额外的数组。因此,您需要:

cell.textLabel.text = self.filteredContent[indexPath.row][0][@"recipeName"];

filteredContentArray的每个元素都是另一个数组。每个内部数组都有包含所需数据的字典。

按照@rmaddy的建议执行,或者:

更改:

[results addObject:@[recipe]];
致:


说明: NSInvalidArgumentException',原因:'-[\uu NSArrayI长度:发送到实例的选择器无法识别

这个错误告诉我们:

  • 对象是一个
    NSArray
    (不知何故,在某处)
  • 在此
    NSArray
    对象上调用的方法是
    length
    • 但是
      NSArray
      没有
      length
      方法
    • 似乎在某个地方发送了对
      length
      方法的调用,很可能是在一个
      NSString
      对象上发送的,该对象实际上持有一个
      NSArray
      对象,而不是一个
      NSString
      对象
  • 首先请注意,当您指定:

  • @[]
    • 这意味着要创建的对象是
      NSArray
      对象
    • 参考:
  • 所以当您这样做时:
    [results addObject:@[recipe]];

    • @[recipe]

      相当于
    • [NSArray alloc]initWithObjects:recipe,nil]
    所以…您基本上是采用
    配方
    ,将其放入一个数组中,然后将此数组对象添加到
    结果
    (这是另一个数组)中

    稍后当您来到
    PageView

    [[self.filteredContent objectAtIndex:indexPath.row] valueForKey:@"recipeName"];
    
    将返回键
    recipeName
    的值数组

    因此,基本上,字符串包含的是数组,而不是字符串对象。

    现在…无论您是否在其上调用了
    length
    ,在生命周期的某个地方,
    length
    cell.textlab.text
    上被调用,并引发了这个错误。

    您在解析JSON吗?如果您认为您有字符串,您实际上有一个数组。@rmaddy不,我没有解析JSON。我使用的是同一个TableViewControllerh到目前为止,几个过滤器都工作正常。所以我不认为这是下一个问题。你是在告诉我我正在尝试将我的cellLabel.text设置为数组吗?是的,
    myValue
    实际上是指向一个
    NSArray
    ,而不是一个
    NSString
    。这可能是由于误用了
    valueForKey:
    。如果你不明白的话如何在数组中获取所需字符串,请添加有关数据结构的详细信息。因此,您认为这是导致此异常的问题吗?@rmaddy添加了所有详细信息。您在哪里执行此操作-
    [results addObject:@[recipe]];
    您正在添加一个包含单个元素的元素,这是您的配方数组FPList。您可能只是想要
    [results addObject:recipe]
    ?@Paulw11哦,我怎么会错过这个。是的,这就是诀窍。谢谢您
    [[self.filteredContent objectAtIndex:indexPath.row] valueForKey:@"recipeName"];