1

私はこの方法を使用していますが、正しくありません。

- (BOOL)checkExistByEntityName:(NSString *)entityName primaryKeyName:(NSString *)keyName primaryKey:(NSNumber *)primaryKey
{
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@==%@", keyName, primaryKey];

    [request setEntity:entity];
    [request setPredicate:predicate];

    NSError *error = nil;
    NSInteger count = [managedObjectContext countForFetchRequest:request error:&error];

    [request release];

     if (count > 0) {
          return YES;
    } else {
          return NO;
    }
}
4

1 に答える 1

1

述語プログラミングガイドはあなたの友達です。

フォーマット文字列は、%x などの printf スタイルのフォーマット引数をサポートします (「文字列オブジェクトのフォーマット」を参照)。2 つの重要な引数は %@ と %K です。

  • %@オブジェクト値 (多くの場合、文字列、数値、または日付) の var arg 置換です。
  • %K は、キー パスの var arg 置換です。文字列変数が を使用してフォーマット文字列に代入される場合%@、それらは引用符で囲まれます。動的なプロパティ名を指定する場合%Kは、次の例に示すように、書式文字列で使用します。
NSString *attributeName = @"firstName";
NSString *attributeValue = @"Adam";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@",
        attributeName, attributeValue];

だから、ただ使う

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@", keyName, primaryKey];

それが役立つことを願っています。

于 2012-09-21T15:56:43.760 に答える