我收到错误:
由于未捕获的异常而终止应用程序
“NSInvalidArgumentException”,原因:“-[__ NSCFConstantString
subjectType]:无法识别的选择器已发送到实例
我正在尝试根据自己正在学习的学科类型将应用中的学生分类为数组。
AMStudent* student = [[AMStudent alloc] init];
NSMutableArray* studentArray = [[NSMutableArray alloc] init];
NSArray* studentNameArray = [NSArray arrayWithObjects: @"Student1", @"Student2", @"Student3", @"Student4", @"Student5", @"Student6", @"Student7", @"Student8", @"Student9", @"Student10", nil];
[studentArray addObjectsFromArray:studentNameArray];
for (NSInteger i = 0; i < [studentNameArray count]; i++) {
student.name = [studentNameArray objectAtIndex: i];
[student randomAnswer];
NSLog(@"%@", student.description);
}
NSMutableArray* techArray = [NSMutableArray array];
NSMutableArray* humArray = [NSMutableArray array];
for (AMStudent* stud in studentArray){
if ((stud.subjectType & AMStudentSubjectTypeDevelopment) | (stud.subjectType & AMStudentSubjectTypeMath)) {
[techArray addObject:stud];
} else {
[humArray addObject:stud];
}
}
我无法弄清楚我到底在做什么错,因为它在此阶段崩溃:
if ((stud.subjectType & AMStudentSubjectTypeDevelopment) | (stud.subjectType & AMStudentSubjectTypeMath)) {
[techArray addObject:stud];
} else {
[humArray addObject:stud];
}
最佳答案
您使用以下命令填充studentArray
:
[studentArray addObjectsFromArray:studentNameArray];
因此
studentArray
包含NSString
实例。然后,您尝试使用以下方法处理阵列:for (AMStudent* stud in studentArray){
这样做不是而不是神奇地将
NSString
中的studentArray
实例转换为AMStudent
实例。您现在不会出错,因为studentArray
可以包含任何类型的对象,因此编译器只相信您知道自己在做什么,并将对NSString
的引用放入stud
中。然后执行以下操作: if ((stud.subjectType ...
这就要求
stud
引用一个AMStudent
对象,但它没有,它引用了一个(常量)字符串,因此您得到以下错误:NSInvalidArgumentException',原因:'-[ __NSCFConstantString subjectType]:无法识别的选择器已发送到实例
无需将学生的姓名复制到
studentArray
中,您需要创建AMStudent
实例并将其添加到数组中。您是否打算在第一个循环中这样做?高温超导
关于ios - 无法识别的选择器已发送到实例Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40152271/