Validation 核心数据-插入新对象,检查是否存在相同的对象,处理返回

Validation 核心数据-插入新对象,检查是否存在相同的对象,处理返回,validation,core-data,object,Validation,Core Data,Object,我正在处理核心数据,有两个实体(帐户、联系人),其中一个帐户可以有多个联系人(一对多关系) 插入新对象时,我想检查新联系人的电话号码是否已属于现有联系人。如果该号码存在,则应向用户发出通知 在“ContactAddViewController.m”中,调用以下方法,其中contactData是一个NSMutableDictionary,包含新联系人的值和键(在文本字段中输入) 在“AccountInfo.m”中,设置带有谓词和my textfield值的手机请求。如果电话号码不存在,联系人将被添

我正在处理核心数据,有两个实体(帐户、联系人),其中一个帐户可以有多个联系人(一对多关系)

插入新对象时,我想检查新联系人的电话号码是否已属于现有联系人。如果该号码存在,则应向用户发出通知

在“ContactAddViewController.m”中,调用以下方法,其中contactData是一个NSMutableDictionary,包含新联系人的值和键(在文本字段中输入)

在“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;
}
__

问题

如何将0的返回值设置为NSString(或类似的内容),以便构建如下所示的if子句

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

你是说那个方法的返回值

+ (ContactInfo *)findOrCreateContact:(NSDictionary *)data inManagedObjectContext:(NSManagedObjectContext *)context
首先是函数状态的命名
find或create
,因此在这两种情况下,您都应该返回一个对象,即您已经找到的对象或刚刚创建的对象。这将避免可能出现的混乱

其次,您的返回类型是一个对象,因此您应该返回
nil
或一个对象

因此,在这一点上,您必须决定是否要遵守您的命名,但假设您想要。
您可以使用如下方法:

+ (ContactInfo *)findOrCreateContact:(NSDictionary *)data 
              inManagedObjectContext:(NSManagedObjectContext *)context
                   contactWasCreated:(BOOL *)isNew
通过传递指向BOOL的指针,如果创建了ContactInfo,则可以将其设置为YES;如果返回的是已经存在的ContactInfo,则可以将其设置为NO;如果无法返回ContactInfo,则仍然可以返回nil。将布尔值作为指针传递的灵感来源于
-(BOOL)save:(NSError**)error
将指针传递到对象时,如果需要,可以检索NSError。
如果你能说

if (contanctInfo && wasCreated)
{
    // I've got a new one
}
else if (contactInfo) 
{
     // I just receive an old one
}
else
{
     // something very bad just happened...
}
您还可以决定返回一个NSDictionary,其中ContactInfo作为一个条目,BOOL的NSNumber作为另一个条目

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