我正在創建一個方法來檢查用戶是否有任何已經註冊到應用程序的朋友。然而,當我試圖從該塊內返回,我得到一個編譯錯誤說:Incompatible block pointer types sending 'BOOL (^)(__strong id, NSError *__strong)' to parameter of type 'PFIdResultBlock' (aka 'void (^)(__strong id, NSError *__strong)')
在pfcloud函數中返回bool
這是當我運行下面的代碼:
-(BOOL)hasFriend:(NSArray*)phoneNums{
[PFCloud callFunctionInBackground:@"checkUsers"
withParameters:@{@"array": phoneNums}
block:^(id success, NSError *error) {
if(success){
return YES;
}
else{
return NO;
}];
}
我也試過這樣:
-(BOOL)hasFriend:(NSArray*)phoneNums{
__block bool hasFriend = nil;
[PFCloud callFunctionInBackground:@"checkUsers"
withParameters:@{@"array": phoneNums}
block:^(id success, NSError *error) {
if(success){
hasFriend = YES;
NSLog(@"found a florin user!");
}
else{
hasFriend = NO;
}
}
}];
NSParameterAssert(hasFriend);
return hasFriend;
}
但是,這永遠不會通過NSParameterAssert
。
第一種方法崩潰,因爲您正在創建一個返回類型爲void的塊,但試圖返回一個BOOL。我並不十分熟悉NSParameterAssert函數,但文檔中說'斷言評估條件,如果條件計算結果爲false,則調用當前線程的斷言處理程序......'也許'hasFriend'是'NO', NSParameterAssert函數將其視爲false並嘗試調用斷言處理程序。您使用此功能的任何特定原因? – AMI289 2014-10-28 11:40:10