0

たまたまDate型であるtimeStamp属性を持つこのエンティティを使用しています

ここに画像の説明を入力してください

次のような日付で検索しようとすると、問題が発生します。

NSDate *today = [NSDate date];
NSDate *end_day = [today dateByAddingTimeInterval: -5*one_day]; // the last 5 days
result = [helper fetchObjectsForEntityName:@"MyEntity" withPredicate:
[NSPredicate predicateWithFormat:@"timestamp > %f", [end_day ] ]];

述語の値を出力すると、次のようになります。

timestamp > CAST(378132723.717909, "NSDate")

ただし、ステートメントが実行されると、クラッシュします。コードの他の部分でも同じメソッドを使用していますが、問題なく機能します。明らかに、NSPredicateを削除すると、再び機能します。

質問のために、fetchObjectsForEnittyNameのコードもあります:WithPredicate:

- (NSSet *)fetchObjectsForEntityName:(NSString *)newEntityName
                       withPredicate:(id)stringOrPredicate, ...
{
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:newEntityName];
    if (stringOrPredicate)
    {
        NSPredicate *predicate;
        if ([stringOrPredicate isKindOfClass:[NSString class]])
        {
            va_list variadicArguments;
            va_start(variadicArguments, stringOrPredicate);
            predicate = [NSPredicate predicateWithFormat:stringOrPredicate
                                               arguments:variadicArguments];
            va_end(variadicArguments);
        } else {
            NSAssert2([stringOrPredicate isKindOfClass:[NSPredicate class]],
                      @"Second parameter passed to %s is of unexpected class %@",
                      sel_getName(_cmd), @"Whatevah");
            predicate = (NSPredicate *)stringOrPredicate;
        }
        [request setPredicate:predicate];
    }

    NSError *error = nil;
    NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error];
    if (error != nil)
    {
        [NSException raise:NSGenericException format:[error description]];
    }

    return [NSSet setWithArray:results];
}

問題が何であるかについて誰かが手がかりを持っていますか?

4

2 に答える 2

0

まず、オブジェクトをスカラーと比較していて、余分なブラケットがいくつかあるということです。代わりにこれを試してください。

[NSPredicate predicateWithFormat:@"timestamp > %@", end_day];

次に試すことは、次のような属性のフォーマット指定子です。

[NSPredicate predicateWithFormat:@"%K > %@", @"timestamp", end_day];
于 2012-12-19T13:44:31.020 に答える
0

複雑な質問は答えが最も簡単なようです。

使っていた

 [NSPredicate predicateWithFormat:@"timestamp > %@", end_day]; 

私の実体で説明されているように、大文字のSなしで!だからそれはすべきだった

 [NSPredicate predicateWithFormat:@"timeStamp > %@", end_day];

ケースは解決しました。

于 2012-12-19T13:45:42.830 に答える