2011-12-14 5 views
4

私はコアデータを扱っており、1つのアカウントに複数の連絡先(1対多関係)。コアデータ - 新しいオブジェクトを挿入して、同じオブジェクトが存在するかどうかを確認して、返品を処理します

新しいオブジェクトを挿入するとき、新しい連絡先の電話番号が既に既存の連絡先に属しているかどうかを確認したいと思います。番号が存在する場合は、ユーザーに通知する必要があります。

"ContactAddViewController.m"には、contactDataが新しい連絡先(テキストフィールドに入力された)の値とキーを持つNSMutableDictionaryの場合、次のメソッドが呼び出されます。

[ContactInfo findOrCreateContact:contactData inManagedObjectContext:context]; 

"AccountInfo.m"には、述部を持つ電話機の要求とmy textfieldの値が設定されています。電話番号が存在しない場合は、連絡先は「のContactInfo」エンティティに追加されます - それが存在する場合、メソッドは0

+ (ContactInfo *)findOrCreateContact:(NSDictionary *)data inManagedObjectContext:(NSManagedObjectContext *)context 
{ 
    ContactInfo *contactInfo = nil; 

    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    request.entity = [NSEntityDescription entityForName:@"ContactInfo" inManagedObjectContext:context]; 
    request.predicate = [NSPredicate predicateWithFormat:@"phone == %@", [data objectForKey:@"phone"]]; 

    NSError *error = nil; 
    contactInfo = [[context executeFetchRequest:request error:&error] lastObject]; 

    if (!error && !contactInfo) 
    { 
     // if phone number can't be found, create new contact 
     contactInfo = [NSEntityDescription insertNewObjectForEntityForName:@"ContactInfo" inManagedObjectContext:context]; 
     contactInfo.firstName = [data objectForKey:@"firstName"]; 
     contactInfo.lastName = [data objectForKey:@"lastName"]; 
     contactInfo.phone = [data objectForKey:@"phone"]; 
     contactInfo.updatedDate = [NSDate date]; 
     contactInfo.cinfoTOainfo = [AccountInfo findOrCreateAccount:data inManagedObjectContext:context]; 
    } 

    // Return object 
    return contactInfo; 
} 

__質問

方法を返します。 NSString(またはそのようなsth)に0の戻り値を設定して、次のようなif節を構築できますか?

if (...) // What should I put in here? 
{ 
    // if phone number doesn't exist, do that. 
} 
else 
{ 
    // if phone number exist, do that. 
} 

答えて

4

あなたはそのメソッドからの戻り値を意味しますか?

+ (ContactInfo *)findOrCreateContact:(NSDictionary *)data inManagedObjectContext:(NSManagedObjectContext *)context 

まず機能状態find OR createの命名はとてもそのような名前を持つあなたは、両方のケースでは、あなたが見つけてきた一つだけ作成したものをオブジェクトを返す必要があります。それは混乱を避けるでしょう。

第2に、戻り値の型がオブジェクトなので、nilまたはオブジェクトを返す必要があります。

だから、あなたはあなたの命名に従うかどうかを決めなければなりません。あなたはのContactInfoが作成された場合にはYESに設定して取得することができますBOOLへのポインタを渡すことによって

+ (ContactInfo *)findOrCreateContact:(NSDictionary *)data 
       inManagedObjectContext:(NSManagedObjectContext *)context 
        contactWasCreated:(BOOL *)isNew 

とNOあなたはすでに存在していたものを返している場合、あなた:
は、次のようなメソッドを持つことができますContactInfoを返すことができなかった場合でも、nilを返すことができます。ポインタとしてBOOLを渡すことは、オブジェクトへのポインタを渡している必要がある場合にNSErrorを取得できる- (BOOL)save:(NSError **)errorによって影響を受けます。あなたは

if (contanctInfo && wasCreated) 
{ 
    // I've got a new one 
} 
else if (contactInfo) 
{ 
    // I just receive an old one 
} 
else 
{ 
    // something very bad just happened... 
} 

を言うことができれば
はだからあなたにまた他のエントリとしてBOOLのために1つのエントリとしてのContactInfoとのNSNumberとNSDictionaryのを返すように決めることができました。

+0

これは、ありがとう! :) – flashfabrixx

関連する問題