2012-07-13 62 views
0

我正在使用NSManagedObjects,我想返回任務的預算或任務類別的預算。iOS ARC:ManagedObject指針上的OR運算符

Implicit conversion of int to Budget * is disallowed with ARC. 

這是怎麼回事:

然而,該方法給出了錯誤?

@implementation Task 

@dynamic category; 
@dynamic budget; 

- (Budget *)budgetOrCategoryBudget { 
    return [self budget] || [[self category] budget]; 
} 

回答

5

||是操作員接受兩個物體或基元,並返回TRUE如果值中的至少一個是非零(如果一個對象)或非零(如果原語)和FALSE否則。在Objective-C中BOOL實際上是一個int,其中FALSE0TRUE是任何非零值。所以你實際上返回一個BOOL(用int表示),編譯器在這裏期待Budget *

如果你想實際返回兩個預算中的一個,你必須提供一些其他方法來選擇它們之間的選擇。

2

調用

return anything || somethingElse

會返回一個布爾值,如果要返回要麼[個體經營預算]或者被管理對象類變爲1或0 [自我類]預算] ,寫某種if語句:

if(condition){ 
    return [self budget]; 
}else{ 
    return [[self category] budget]; 
} 
3

使用

return [self budget] ? [self budget] : [[self category] budget]; 

或者,更好

return ([self budget] != nil) ? [self budget] : [[self category] budget]; 

(假設你的意圖是,如果它存在返回[self budget],否則[[self category] budget]

+3

鏘還支持語法'[個體經營預算]:[自我類]預算] '(其中省略的第二項與條件具有相同的值)。 – 2012-07-13 19:16:06