0

2つのエンティティが1対多の関係にあるコアデータモデルを設定しました(アイテム。アイテムごとに、複数のResetDateが存在する可能性があります)。モデルが正しく設定されていると確信しています。

新しいアイテムを追加できます。その場合、新しいResetDateを追加します(現在の日付を使用して[NSDate date])。アイテムを取得して表示できます。私が問題を抱えているのは、ResetDatesを取得して表示することです。

更新:以下の回答者に感謝します。問題のコードは次のとおりです。

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];
4

2 に答える 2

3

まず、範囲外のインデックスを渡してもNSArray -objectAtIndex:返されません。インデックスが不明で、を使用する必要がある場合は、チェックする前にメソッドを呼び出す必要があります。nilNSRangeException-objectAtIndex:-count

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

次に、いいえ、それはNSDateオブジェクトではありません。itemリセット関係(item.resets)を要求すると、オブジェクトではなく、管理対象オブジェクトNSSetを含むが返されます。必要なのは、返された管理対象オブジェクトの属性です。おそらく次のようになります。ResetNSDateresetDateReset

// 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];
}

それがお役に立てば幸いです、そして私の英語が理解できることを願っています...

于 2009-08-26T18:05:37.777 に答える
1

多分交換:

NSDate *oldDate = sortedResets[0];

と :

NSDate *oldDate = [sortedResets objectAtIndex:0];

役立ちます。sortedResetsはNSArrayオブジェクトであり、C配列ではありません;)

于 2009-08-25T13:28:12.787 に答える