@selector以不同的方法抛出错误

时间:2013-12-21 21:41:25

标签: objective-c

- (void)viewDidLoad
{
    [self performSelectorInBackground:@selector(createBlogPosts:) withObject:false];
    self.progressBar.alpha = 0.0;
}

//actual method here
-(void)createBlogPosts:(BOOL)refresh

- (IBAction)refreshButtonPressed {
    //[self performSelectorInBackground:@selector(createBlogPosts:) withObject:false];
    [self performSelector:@selector(createBlogPosts:) withObject:true]; 
}

a)我完全不了解@selectors是什么 b)在视图中加载,[self performSelectorInBackground:@selector(createBlogPosts :) withObject:false]编译得很好,并按预期工作。然而当我的refreshButtonPressed动作被触发时,我尝试运行相同的方法,只是使用不同的参数(如果我有任何错误无关紧要)我得到2个错误:

(警告)与指针转换不兼容的整数将'int'发送到'id'类型的参数 (警告)ARC不允许将'int'隐式转换为'id'

任何对编码不熟悉的人的帮助都会很棒!谢谢!

1 个答案:

答案 0 :(得分:2)

performSelector:withObject:期待一个对象。 BOOL不是一个对象,所以它会给出错误。

一种可能的解决方案是让你的方法获得一个NSNumber createBlogPosts:(NSNumber *)value,然后做出类似的事情:

NSNumber *passedValue = [NSNumber numberWithBool:YES];
[self performSelector:@selector(createBlogPosts:) withObject:passedValue];

在方法中:

-(void)createBlogPosts:(NSNumber *)value {
   BOOL value = [value boolValue];
}

额外信息: Why it does not crash in the viewDidLoad? 因为false等于nil所以它会认为这是一个零对象并且不会崩溃。

为了更好地理解选择器,请阅读此documentation关于选择器。