[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];
您将一个数组作为唯一项添加到数组scorearray
和dataArray
中。您不会添加一堆字符串,我假设它们存储在highScores
和data
中。
替换为
[scorearray addObjectsFromArray:highScores];
[dataArray addObjectsFromArray:data];
这应该将highScores
和data
的内容添加到scorearray
和dataarray
。
【讨论】:
先从模拟器或设备中删除应用。现状是您的用户偏好已经损坏。使用干净的数据从头开始,然后选择addObjectsFromArray
。 addObject
肯定是错误的,除非你想添加一个数组而不是多个字符串。
谢谢。现在好了。以上是关于[NSCFArray 长度]:发送到实例的无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章
-[__NSCFArray bytes]: 无法识别的选择器发送到实例
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[__NSCFArray objectForKey:]:无法识别的选择器发送到实例