第二次使用某个方法会给我一个错误(IOS)
我正在用objective c(Xcode)编写这个应用程序 当我第一次使用一种方法时,一切都很顺利,但当我第二次使用它时,它会给我一个错误 我试图调试它,错误出现在if([tutor.userName IsequalString:userName])行中的addtutor方法中 这就是错误: -[\uu NSCFConstantString userName]:发送到的选择器无法识别 实例0xad14c 2016-02-26 20:10:44.043项目[1258:35474]*** 由于未捕获异常而终止应用程序 “NSInvalidArgumentException”,原因:'-[\uu NSCFConstantString 用户名]:发送到实例0xad14c'的无法识别的选择器 这是我的代码:第二次使用某个方法会给我一个错误(IOS),ios,objective-c,Ios,Objective C,我正在用objective c(Xcode)编写这个应用程序 当我第一次使用一种方法时,一切都很顺利,但当我第二次使用它时,它会给我一个错误 我试图调试它,错误出现在if([tutor.userName IsequalString:userName])行中的addtutor方法中 这就是错误: -[\uu NSCFConstantString userName]:发送到的选择器无法识别 实例0xad14c 2016-02-26 20:10:44.043项目[1258:35474]*** 由于未捕
- (IBAction)addToFavorite:(id)sender {
AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSString * userName = delegate.delegateStr;
Student * student = [[Model instance]getStudentByUserName:userName];
[student addTutor:self.tutor.userName];
UIStoryboard* sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
FavoritesTableViewController * ftvc = [sb instantiateViewControllerWithIdentifier:@"favoritesTableViewController"];
ftvc.favTutors = student.favTutors;
[[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshTable" object:nil userInfo:nil];
}
-(void)addTutor:(NSString*)userName {
BOOL check = YES;
for (Tutor * tutor in self.favTutors) {
if([tutor.userName isEqualToString:userName])
check = NO;
}
if(check)
[self.favTutors addObject:userName];
}
请帮忙
谢谢。问题就在我添加评论的那一行。您正在向充满
Tutor
对象的对象添加NSString
。在这个方法的第二个调用中,在for循环中,tutor实际上是一个NSString
,您试图调用tutor.userName
,它不存在于NSString
对象中
-(void)addTutor:(NSString*)userName {
BOOL check = YES;
for (Tutor * tutor in self.favTutors) {
if([tutor.userName isEqualToString:userName])
check = NO;
}
if(check)
[self.favTutors addObject:userName]; //problem here!!!!
}
我的建议是创建tutor对象并将其添加到数组中
-(void)addTutor:(NSString*)userName {
BOOL check = YES;
for (Tutor * tutor in self.favTutors) {
if([tutor.userName isEqualToString:userName])
check = NO;
}
if(check)
{
// create Tutor object and add it to array dont add NSString directly
}
}
这是失败的,因为您正在
favTutors
数组中添加username
,而不是Tutor
的对象。因此,当您添加第一个对象,然后下次通过self.favTutors
枚举时,实际上您有一个字符串对象,它不会响应username
属性。错误消息说Tutor
实例实际上是一个NSString
,favTutors
是如何声明的?@property NSMutableArray*favTutors;查看答案,您正在addTutor
方法中将NSString
对象而不是Tutor
对象添加到favTutors
。将favTutors
声明为轻量级泛型,编译器将帮助您。问题在于:if([tutor.userName isEqualToString:userName])它第一次起作用是因为favTutors是空的,所以它不会进入内部,但第二次favTutors不是空的,所以当它进入时,如果它给我一个错误,我的意思是第一个问题开始的地方,而不是错误产生的地方