2009-08-25 4 views
0

コアデータモデルが設定されていて、1対多リレーションシップの2つのエンティティ(アイテム、各アイテムごとに複数のResetDateがあります)があります。私はモデルが正しく設定されていると確信しています。コアデータのトラブル日付

新しいアイテムを追加することができます。新しいアイテムを追加するには、新しいリセット日を追加してください(現在の日付は[NSDate date]です)。アイテムを取得して表示することができます。私が問題を抱えているのは、ResetDatesを取得して表示することです。

を更新しました:これは今、以下の回答者に感謝しています。

NSDate *oldDate = sortedResets[0]; 

で:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"resetDate" ascending:NO]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor count:1]; 

NSMutableArray *sortedResets = [[NSMutableArray alloc] initWithArray:[item.resets allObjects]]; 
[sortedResets sortUsingDescriptors:sortDescriptors]; 

NSDate *oldDate = [[sortedResets lastObject] resetDate]; 
if (!oldDate) { 
    oldDate = [NSDate date]; 
} 

NSInteger numberOfDays = [self timeIntervalWithStartDate:oldDate withEndDate:currentDate]; // This function works fine, when given two NSDate objects 

daysSinceLabel.text = [NSString stringWithFormat:@"%d days", numberOfDays]; 

答えて

3

まず、NSArray -objectAtIndex:nilを返すされていない、あなたはそれを範囲外のインデックスを渡す場合、約わからないとき、それは、NSRangeExceptionが発生しますインデックスを作成し、-objectAtIndex:を使用する必要がある場合は、事前に-countメソッドに電話する必要があります。

さらに重要なことは、はオブジェクトではないため、nilの値を含むことはできません。

次に、いや、それはNSDateオブジェクトではありません、それはリセット関係(item.resets)だために、あなたがitemを頼むとき、あなたがいないNSDateオブジェクト、見返りにReset管理対象オブジェクトが含まれているNSSetを取得し、あなたがしたいことのresetDate属性であります私も `initWithObの交換をお勧めしたい

+0

ああ、大丈夫です。これは今や*もっと大事なことです - それは 'NSDate'ではなく' Reset'オブジェクトです。 1つの問題: 'resetDate'はメソッドではなく' Reset'クラスの '@ property'です。私はこれらのことについての文法はあまり良くはありません... '[[sortedResets lastObject] .resetDate]'を試みましたが、それは明らかに私が探しているものではありません... – Triz

+0

@Triz since 'resetDate' '@ property'として宣言されている場合、あなたのResetオブジェクト*は' resetDate'と 'setResetDate:'メソッドを持ちます。これが '@ property'構文の全体のポイントです。 –

+0

@Dave:そうです、大丈夫です。しかし、その行には、resetDateメソッドが宣言されていないという警告が表示されています。'@property(nonatomic、retain)NSDate * resetDate;'と '@dynamic resetDate;'の実装では、 'Reset'クラスのヘッダーにあります。 '@dynamic'ではなく' @ synthesize'でなければなりませんか?後者は、私が始めたCoreDataテンプレートが何をしているかということです。 – Triz

1

は多分交換:ここでは、コードの問題であります

NSDate *oldDate = [sortedResets objectAtIndex:0]; 

のに役立ちます。 sortedResetsにNSArrayオブジェクトではなく、Cの配列である;)

+0

助ける

// NSArray -lastObject method return nil if the array is empty // Sending messages to nil is Ok there, so we can call resetDate directly NSDate *oldDate = [[sortedResets lastObject] resetDate]; if (!oldDate) { oldDate = [NSDate date]; } 

希望、そして私の英語が理解できること...:返さReset管理対象オブジェクト、多分このような何かjects:count: 'より簡単な' initWithObject: 'メソッドを使ってsortDescriptors配列を作成するメソッドです。 –

+0

Dave:これは( 'NSArray * sortDescriptors = [[NSArray alloc] initWithObject:sortDescriptor];')は動作しません。 – Triz

+0

ブライアン:ありがとう、私は時々C言語ではないことを忘れています:) 私はもっと近づくと思いますが、新しいアイテムが作成されるとクラッシュするようになりました。新たに作成された行を表示するために呼び出されますが、まだインデックス0には何もありません。私は上に挿入した 'if(){}'が助けなければならないと思ったが、それでもなお死ぬ。何か案は? – Triz

関連する問題