2012-07-13 79 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