[__NSArrayI 长度]:发送到实例的无法识别的选择器
Posted
技术标签:
【中文标题】[__NSArrayI 长度]:发送到实例的无法识别的选择器【英文标题】:[__NSArrayI length]: unrecognized selector sent to instance 【发布时间】:2014-02-18 20:21:14 【问题描述】:我正在尝试将数据从 Collection View Controller 传递到 Table View Controller,但是当我认为一切正常时,就会出现这个问题。无法识别的选择器发送到实例我的代码是这样的:
ViewController.m(集合视图控制器)
#import "ViewController.h"
#import "ColViewCell.h"
#import "DetailViewController.h"
@interface ViewController ()
// Private member varibles
NSArray *_arrayOfImages;
NSArray *_arrayOfNames;
// Array de ingredientes
NSArray *_arrayOfCeviche;
NSArray *_arrayOfTacacho;
NSArray *_arrayOfAnticucho;
NSArray *_arrayOfPapita;
NSArray *_arrayOfParihuela;
NSArray *_arrayOfLomo;
NSArray *_arrayOfIngredients;
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// Array que contiene los titulos
_arrayOfNames = @[@"Anticucho", @"Arroz Chaufa", @"Cebiche", @"Pachamanca", @"Papa a la Huancaina", @"Parihuela", @"Picante de cuy", @"Tacacho con cecina", @"Pollo a la brasa", @"Lomo saltado"];
// Array que contiene las imagenes
_arrayOfImages = @[@"Anticucho.jpg", @"chaufa.jpg", @"ceviche.jpg", @"pachamanca.jpg", @"papita.jpg", @"parihuela.jpg", @"cuy.jpg", @"tacacho.jpg", @"brasa.jpg", @"lomo.jpg"];
// Arrays que de los ingredientes
_arrayOfCeviche = @[@"Quesito", @"Limon", @"Choclito", @"Cocinita", @"La lechesita", @"La miradita", @"La weuabdita", @"La cagada", @"Ptm Toy Jodido XD", @"Que emoción", @"Wiiiiiii"];
_arrayOfLomo = @[@"Que novedada", @"jajajaja que buena", @"Lukita", @"losisisisi", @"maniserio", @"joder", @"joselet", @"lskadlkdl", @"bah"];
_arrayOfPapita = @[@"que buena!", @"csm!!", @"que genio!", @"novedades", @"que rico!!", @"coger delicisioso", @"Mffffff"];
_arrayOfParihuela = @[@"Un culaso", @"Chambon", @"Noveades", @"que hacer", @"asu macho", @"Espero que este bien", @"Así es la vida la chamba", @"Debo aprender mas!!"];
_arrayOfTacacho = @[@"Tacachin", @"Lalilinnn", @"Masinisn", @"Joder", @"Ojojoojojo", @"Lista hermosa!"];
_arrayOfAnticucho = @[@"Me encanta Objective-c", @"Hermosisimo", @"Me encanta xcode!", @"Que hermoso es esto", @"Debe ser un chambon total", @"jajajaja novedades", @"Lol supremo"];
***NSArray that contains all the arrays***
_arrayOfIngredients = @[_arrayOfCeviche, _arrayOfLomo, arrayOfAnticucho, _arrayOfParihuela, _arrayOfTacacho, _arrayOfPapita];
以及我将数据从我的集合视图传递到表格视图的方法
// Method to pass data from a view to another view
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([segue.identifier isEqualToString:@"showDetail"])
NSIndexPath *indexPath = [[self.collectionView indexPathsForSelectedItems] objectAtIndex:0];
DetailViewController *dvc = [segue destinationViewController];
dvc.Titulos = [_arrayOfIngredients objectAtIndex:indexPath.item];
我的 DetailViewController.h(表格视图控制器)
#import <UIKit/UIKit.h>
@interface DetailViewController : UITableViewController
@property (strong, nonatomic) NSString *Titulos;
@end
我的 DetailViewController.m(表格视图控制器)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
***Xcode tell me this line is the problem...***
cell.textLabel.text = self.Titulos;
return cell;
我的代码有什么问题??? U.u
【问题讨论】:
这意味着 NSArray 不识别“长度”方法。尝试“count”或从传递 NSArray 切换为传递 NSString。 NSArray has nolength
method.
(提示:如果您花时间研究它,您忽略的所有异常 gorp 都非常有价值。它会告诉您,例如,发生异常的确切行,您所在的对象的类型处理(NSArray),以及被调用的方法(“length”))。
(如果您费心在问题中包含该异常信息,并找出错误所在的行,您会让这里的人们更快乐,并且不太愿意对您的问题投反对票。)
非常感谢您的建议 :) 我是 iOS 开发和 *** 的新手 :) 下次我会这样做 :)!
【参考方案1】:
dvc.Titulos = [_arrayOfIngredients objectAtIndex:indexPath.item];
如果_arrayOfIngredients
是一个包含多个 NSArray 对象的 NSArray,那么您将一个数组传递给 Titulos 对象。
Titulos 是一个 NSString,因此当 UILabel 尝试访问 NSString 上的 - length
属性时,会发生崩溃,因为 Titulos 是一个 NSArray 而不是 NSString。
在您的 DetailViewController 上,我假设您想从 _arrayOfIngredients 传递一个子数组。
#import <UIKit/UIKit.h>
@interface DetailViewController : UITableViewController
@property (strong, nonatomic) NSArray *Titulos;
@end
然后您必须像 ViewController 一样配置 DetailViewController,但使用 Titulos 数组。
【讨论】:
哦,我明白了,我应该寻找什么属性来解决我的问题?或者我应该寻找或做什么?【参考方案2】:NSArray
不响应length
,它响应count
。在以下行中:
dvc.Titulos = [_arrayOfIngredients objectAtIndex:indexPath.item];
您将NSArray
传递给采用NSString
的属性,因此它有时会尝试获取字符串的长度,而是在NSArray
对象上调用length
方法,这没有响应,所以它崩溃了。
【讨论】:
哦,我明白了,我应该寻找什么属性来解决我的问题?或者我应该寻找或做什么? 这取决于你想用那个值做什么。您需要检查您的程序逻辑。就像现在一样,Titulos
设置为您在上面定义的那些数组之一。您实际上希望将 Titulos
设置为什么?这是你需要问自己的问题。【参考方案3】:
校验码:
for (int j=0; j<enumKeyReferenceArray.count; j++)
NSString *attri =[enumKeyReferenceArray valueForKey:@"BeltCondition"];
一个问题是我忘记告诉编译器我需要哪个索引元素。
正确的行应该是:
NSString *attri =[enumKeyReferenceArray[j] valueForKey:@"BeltCondition"];
【讨论】:
【参考方案4】:我有一个 NSArray *dataArray 来填充 tableView
是什么导致我的问题是我使用
self.dataArray = [NSArray arrayWithObject:anotherArray];
我应该做的是
self.dataArray = [NSArray arrayWithArray:anotherArray]
因此,在您的情况下,您应该检查 dataArray 中包含的内容
【讨论】:
【参考方案5】:就我而言,问题是通过 API 传来的数据 数据是:
"status": true,
"message": "Order listed successfully.",
"data": [
"order_id": "9",
"restaurant_name": "Demo Restaurant",
"payment_token": "Test162R25892",
"payment_status": "Approved",
"subtotal": "480.00",
"final_amount": "561.00",
"vat": "57.00",
"service_fee": "24.00",
"delivery_fee": "0.00",
"discount": "0.00",
"customer_type": "member",
"created": "2016-02-28 12:17:21",
"order_status": "complete"
]
通过 NSJSONSerialization 将其转换为 NSDictionary 后
data = (
created = "2016-02-28 12:17:21";
"customer_type" = member;
"delivery_fee" = "0.00";
discount = "0.00";
"final_amount" = "561.00";
"order_id" = 9;
"order_status" = complete;
"payment_status" = Approved;
"payment_token" = Test162R25892;
"restaurant_name" = "Demo Restaurant";
"service_fee" = "24.00";
subtotal = "480.00";
vat = "57.00";
);
message = "Order listed successfully.";
status = 1;
我只是错过了 JSON
和 ( 在 Dict 中的 [ 括号,在数据内部并像
lblDate.text = [[dict valueForKey:@"data"] valueForKey:@"created"]
并且发生异常是因为我尝试将数组值发送到标签文本。请仔细查看您正在处理的数据。
【讨论】:
【参考方案6】:就我而言,这是其中一个 pod 的问题。已用pod update
修复。
【讨论】:
以上是关于[__NSArrayI 长度]:发送到实例的无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章
-[__NSArrayI 长度]:无法识别的选择器发送到实例 0x7f1e9f90
-[__NSArrayI replaceObjectAtIndex:withObject:]: 无法识别的选择器发送到实例
为啥我得到“[__NSArrayI allKeys]:无法识别的选择器发送到实例”/为啥 NSDictionary 正在转换?
为啥我得到“[__NSArrayI allKeys]:无法识别的选择器发送到实例”/为啥 NSDictionary 正在转换?