第二次使用某个方法会给我一个错误(IOS)

第二次使用某个方法会给我一个错误(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]*** 由于未捕

我正在用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'的无法识别的选择器

这是我的代码:

- (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不是空的,所以当它进入时,如果它给我一个错误,我的意思是第一个问题开始的地方,而不是错误产生的地方