- (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'
任何对编码不熟悉的人的帮助都会很棒!谢谢!
答案 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关于选择器。