0

我正在使用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];
}
4

3 回答 3

5

||是一个运算符,它接受两个对象或原语,TRUE如果至少有一个值是非零(如果是对象)或非零(如果是原语),则返回,FALSE否则返回。在 Objective-C 中,BOOL 实际上是一个 int,其中FALSEis0并且TRUE是任何非零的值。因此,您实际上返回的是编译器期望的 BOOL(由 int 表示)Budget *

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

于 2012-07-13T19:07:22.117 回答
3

利用

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

或更好

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

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

于 2012-07-13T19:14:02.607 回答
2

打电话

return anything || somethingElse

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

if(condition){
   return [self budget];
}else{
   return [[self category] budget];
}
于 2012-07-13T19:11:19.930 回答