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

||は、2つのオブジェクトまたはプリミティブを受け取りTRUE、値の少なくとも1つが非nil(オブジェクトの場合)または非ゼロ(プリミティブの場合)であるかどうかを返す演算子ですFALSE。Objective-Cでは、BOOLは実際にはintであり、ここFALSE0TRUEはゼロ以外のものです。したがって、実際には、コンパイラがを期待しているBOOL(intで表される)を返しますBudget *

2つの予算のいずれかを実際に返したい場合は、それらの間で選択する他の手段を提供する必要があります。

于 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になります。[自己予算]または[[自己カテゴリ]予算]のいずれかを返したい場合は、次のようなifステートメントを記述します。

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