1

1 つのセルから ID と名前を取得するこのコードがあります。行を選択すると、この選択を保存して Core Data に送信する必要があります。名前..どうすれば追加をやめることができますか?

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSManagedObject *villesR = [NSEntityDescription
                                   insertNewObjectForEntityForName:@"Ville"
                                   inManagedObjectContext:context];


[villesR setValue:idVille forKey:@"idV"];
[villesR setValue:nomville forKey:@"nom"];

[self.navigationController pushViewController:detailView animated:YES];
4

3 に答える 3

7

ティダン、

オブジェクトが既に存在するかどうかを確認する必要がある場合は、フェッチ リクエストを設定し、特定の述語を使用する必要があります。あなたの場合、単純にフェッチして、すでにVille持っているかどうかを確認できます 。の識別子のようなものidVだと思います。をチェックすると同じかもしれませんが、世界の 2 つの異なる場所に同じ名前の 2 つが存在する可能性があります。idVVillenomcities

@alpzソリューションは大丈夫です。さらに、フェス制限を 1 に設定することもできます。

[request setFetchLimit:1];

それ以外の場合は、単に行うことができます

NSUInteger count = [context countForFetchRequest:request error:&error];    
if(count == 0) {

     // add the new city here
}

それ以外の

NSArray *results = [context executeFetchRequest:request error:nil]; 

@Phillip MillsNSManagedObjectは、Key Value Coding アクセスを使用する代わりにサブクラスを使用できると言っています。単純な文字列キーではなく、クラスのプロパティを操作する方が簡単だと思います。

したがって、Villeサブクラス ( organising-core-data-for-ios ) を作成したら、 という名前のカテゴリをVille+Extension作成し、次のようなメソッドを作成するだけです。

+ (Ville *)villeWithUniqueName:(NSString *)name withManagedObjectContext:(NSManagedObjectContext*)context
{
    NSFetchRequest * request = [[NSFetchRequest alloc] init];
    [request setEntity:[NSEntityDescription entityForName:@"Ville" inManagedObjectContext:context]];
    [request setPredicate:[NSPredicate predicateWithFormat:@"nom = %@", name];
    [request setFetchLimit:1];

    NSArray *results = [context executeFetchRequest:request error:nil];        

    Ville* theVille = nil;  

    if ([results count] == 0)
    {
        theVille = // create the new here
    }
    else
    {
        theVille = (Ville*)[results objectAtIndex:0];
    }

    [request release]; // if you don't use ARC

    return theVille;
}

次に、そのカテゴリを (インポート後に) 次のように使用します。

Ville* theVille = [Ville villeWithUniqueName:@"yourName" withManagedObjectContext:yourContext];

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

于 2012-06-14T13:08:58.263 に答える
1

コア データを保存する前に、その存在を確認する必要があります。これが私が同じ状況に対処した方法です。

NSFetchRequest * request = [[NSFetchRequest alloc] init];
NSManagedObjectContext* context=[Server serverInfo].context;
[request setEntity:[NSEntityDescription entityForName:@"Coupon" inManagedObjectContext:context]];
[request setPredicate:[NSPredicate predicateWithFormat:@"Upc=%@",[[ar objectAtIndex:i]valueForKey:@"upc_code"]]];
NSArray *results = [context executeFetchRequest:request error:nil]; 
[request release];

if ([results count] == 0)
{
    //core data does not have an entry with the upc code(in my case) that i am searching
}
else
{
    // core data have already an entry with that upc code
}

この結果配列は、そのエントリが存在するかどうかを示します。ご不明な点がございましたら、お知らせください。コーディングをお楽しみください。

于 2012-06-14T11:35:28.947 に答える
0

あなたの最善の策は、おそらく次のような City クラスとそのクラス メソッドを作成することです。

+ (City *)cityWithUniqueName:(NSString *)name;

そこで、その名前で既存のコア データ オブジェクトを検索し、それを返します。見つからない場合は、を使用して作成しinsertNewObjectForEntityForName、それを返します。

于 2012-06-14T11:37:57.917 に答える