[NSCFArray 长度]:发送到实例的无法识别的选择器

Posted

技术标签:

【中文标题】[NSCFArray 长度]:发送到实例的无法识别的选择器【英文标题】:[NSCFArray length]: unrecognized selector sent to instance 【发布时间】:2014-12-09 13:54:25 【问题描述】:

我正在尝试用数组中的一些数据填充表格视图。数组已填充,但是当我运行应用程序时出现此错误:原因:'-[__NSCFArray 长度]:无法识别的选择器已发送到实例

我搜索了类似的问题,但没有人适合我。我不使用 lenght 函数,我的应用程序崩溃了:cell.textLabel.text = [self.currentDate objectAtIndex:indexPath.row];

quizViewController.m

- (void)passDataForward

    ScoreViewController *secondViewController = [[UIStoryboard storyboardWithName:@"Storyboard" bundle:[NSBundle mainBundle]]instantiateViewControllerWithIdentifier:@"score"];

    secondViewController.data =self.scoreLabel.text;
    secondViewController.delegate = self;

    NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
    [highScores insertObject:self.scoreLabel.text atIndex:highScores.count];

    NSData *currentDate =[NSDate date];
    NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init];
    [dateFormatter setDateFormat:@"dd.MM.YYYY                        HH:mm:ss"];
    NSString *dateString =[dateFormatter stringFromDate:currentDate];

    [data insertObject:dateString atIndex:data.count];



    NSMutableArray *scorearray = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] arrayForKey:@"high_scoresarray"]];

     NSMutableArray *dataArray = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] arrayForKey:@"data_score"]];

    [scorearray addObject:highScores];
    [dataArray addObject:data];

    [[NSUserDefaults standardUserDefaults] setObject:scorearray forKey:@"high_scoresarray"];
    [[NSUserDefaults standardUserDefaults] setObject:dataArray forKey:@"data_score"];


    secondViewController.test=[NSMutableArray arrayWithArray: scorearray];
    secondViewController.currentDate=[NSMutableArray arrayWithArray: dataArray];

    [self presentViewController:secondViewController animated:YES completion:^(void)
     

     ];

ScoreViewController.m

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *cellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell==nil) 
        cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
    
    cell.textLabel.text = [self.currentDate objectAtIndex:indexPath.row];
   cell.detailTextLabel.text=[self.test objectAtIndex:indexPath.row];

    return cell;

【问题讨论】:

当您在 ScoreViewController 的 viewDidLoad 方法中使用 NSLog(@"%@",self.currentDate 时,您的领域是什么?它是否也崩溃了?顺便说一句,我不确定是否有你的代码中有错别字,但是这一行 NSData *currentDate =[NSDate date]; , NSData and NSDate? 你的数据在吗?你的变量的名字真的很奇怪,就像我希望 self.currentDate 是 NSDate 一样,但它似乎是数组。也许这是问题 - 在 line cell.textLabel.text = [self.currentDate objectAtIndex:indexPath.row]; 你能确认一下,self.currentDate 确实是一个数组吗? (来自 ScoreViewController 的 cellForRow 方法) self.currentDate 是一个数组,当我 NSLog(@"%@",self.currentDate 好的,请尝试在它崩溃的行之前插入 - if([self.currentDate isKindOfClass:[NSArray class]]) 并在此处插入断点(在 之间)。然后尝试一下,如果它停在那里。我仍然认为 self.currentDate 不是数组:) 【参考方案1】:

错误表示这一行:

[self.currentDate objectAtIndex:indexPath.row]

返回一个数组而不是一个 NSString。这意味着

self.currentDate

包含 NSArray 对象而不是 NSString 对象。

【讨论】:

您可以确认,因为:secondViewController.currentDate=[NSMutableArray arrayWithArray: dataArray];[dataArray addObject:data];[data insertObject:dateString atIndex:data.count]; 我改变了:self.scorearray2 = [[NSUserDefaults standardUserDefaults] arrayForKey:@"high_scoresarray"];并在 cellForRowAtIndexPath cell.textLabel.text = [self.dataArray2 objectAtIndex:indexPath.row];但它不起作用。 (lldb) po self.scorearray2 <__nscfarray>( <__nscfarray>( 0 )【参考方案2】:

阿里斯是对的。 self.currentDate 返回一个 NSArray。这是由以下原因引起的:

[scorearray addObject:highScores];
[dataArray addObject:data];

您将一个数组作为唯一项添加到数组scorearraydataArray 中。您不会添加一堆字符串,我假设它们存储在highScoresdata 中。 替换为

[scorearray addObjectsFromArray:highScores];
[dataArray addObjectsFromArray:data];

这应该将highScoresdata 的内容添加到scorearraydataarray

【讨论】:

先从模拟器或设备中删除应用。现状是您的用户偏好已经损坏。使用干净的数据从头开始,然后选择addObjectsFromArrayaddObject 肯定是错误的,除非你想添加一个数组而不是多个字符串。 谢谢。现在好了。

以上是关于[NSCFArray 长度]:发送到实例的无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章

-[__NSCFArray bytes]: 无法识别的选择器发送到实例

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[__NSCFArray objectForKey:]:无法识别的选择器发送到实例

应用程序崩溃,错误无法识别选择器发送到实例

Swift:手势识别器无法识别的选择器发送到实例

NSCFArray 长度]:错误,数组正则表达式

快速谓词导致错误无法识别选择器发送到实例 0x156c9580'