Objective c iOS ARC:或ManagedObject指针上的运算符

Objective c iOS ARC:或ManagedObject指针上的运算符,objective-c,ios,ios5,Objective C,Ios,Ios5,我使用的是NSManagedObjects,我想返回任务的预算或任务类别的预算 但是,该方法给出了错误: Implicit conversion of int to Budget * is disallowed with ARC. 这是怎么回事 @implementation Task @dynamic category; @dynamic budget; - (Budget *)budgetOrCategoryBudget { return [self budget] || [[

我使用的是
NSManagedObjects
,我想返回任务的预算或任务类别的预算

但是,该方法给出了错误:

Implicit conversion of int to Budget * is disallowed with ARC.
这是怎么回事

@implementation Task

@dynamic category;
@dynamic budget;

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

| |
是一种运算符,它接受两个对象或基本体,如果其中至少有一个值为非零(如果是对象)或非零(如果是基本体),则返回
TRUE
,否则返回
FALSE
。在Objective-C中,布尔实际上是一个int,其中
FALSE
0
TRUE
是任何非零的值。因此,您实际上返回了一个BOOL(用int表示),其中编译器期望预算*

如果您想实际返回两个预算中的一个,您必须提供一些其他方法在它们之间进行选择。

返回任何东西| |某些东西

将返回一个布尔值,托管对象类将其转换为1或0。如果要返回[self budget]或[self category]budget],请编写某种If语句:

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

或者更好

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

(假设您的意图是返回
[self-category]budget]
(如果存在),否则
[[self-category]budget]

Clang也支持语法
[self-budget]?:[[self-category]budget]
(省略的第二个术语与条件具有相同的值)。
return ([self budget] != nil) ? [self budget] : [[self category] budget];