【问题标题】:Using a method a second time gives me an error (IOS)第二次使用方法给我一个错误(IOS)
【发布时间】:2016-02-26 18:18:45
【问题描述】:

我正在用 Objective c (Xcode) 编写这个应用程序。

当我第一次使用一个方法时一切顺利,但是当我第二次使用它时,它给了我一个错误。

我尝试调试它,错误出现在 if([tutor.userName isEqualToString:userName]) 行中添加导师的方法中

这是错误:

-[__NSCFConstantString userName]:无法识别的选择器发送到 实例 0xad14c 2016-02-26 20:10:44.043 项目 [1258:35474] *** 由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'-[__NSCFConstantString userName]: 无法识别的选择器发送到实例 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实例实际上是NSStringfavTutors是如何声明的?
  • @property NSMutableArray * favTutors;
  • 查看答案,您在addTutor 方法中将NSString 对象而不是Tutor 对象添加到favTutors。将favTutors 声明为轻量级泛型,然后编译器将帮助您。

标签: ios objective-c


【解决方案1】:

这是失败的,因为您在 favTutors 数组中添加了 username 而不是 Tutor 的对象。因此,当您添加第一个对象,然后下次通过 self.favTutors 枚举时,您实际上有一个不会响应 username 属性的字符串对象。

【讨论】:

    【解决方案2】:

    问题出在我添加评论的那一行。您正在向充满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!!!!
    }
    

    我的建议是创建导师对象并将其添加到您的数组中。

    -(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
        }
    }
    

    【讨论】:

    • 问题出在: if([tutor.userName isEqualToString:userName]) 它第一次可以工作,因为 favTutors 是空的,所以它不会进去,但第二次 favTutors 不为空所以当它转到 if 它给我一个错误
    • 我的意思是第一个问题从哪里开始,而不是从哪里引发错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多