我正在使用Core Data并获得两个实体(帐户,联系人),其中一个帐户可以有多个联系人(一对多关系)。
插入新对象时,我想检查新联系人的电话号码是否属于现有联系人。如果该号码存在,则应该有用户通知。
在“ContactAddViewController.m”中调用以下方法,其中contactData是NSMutableDictionary,其中包含新联系人的值和键(在文本字段中输入)。
[ContactInfo findOrCreateContact:contactData inManagedObjectContext:context];
在“AccountInfo.m”中,设置具有谓词和我的文本字段值的电话请求。如果电话号码不存在,联系人将被添加到实体“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.
}
答案 0 :(得分:4)
你的意思是该方法的返回值?
+ (ContactInfo *)findOrCreateContact:(NSDictionary *)data inManagedObjectContext:(NSManagedObjectContext *)context
首先命名函数状态find OR create
所以使用这样的名称,你应该返回一个对象,你找到的对象或刚刚创建的对象。这样可以避免可能的混淆。
其次,您的返回类型是一个对象,因此您应该返回nil
或一个对象。
所以在这一点上你必须决定是否要遵守你的命名,但是你想说的是你想要的。
你可以有这样的方法:
+ (ContactInfo *)findOrCreateContact:(NSDictionary *)data
inManagedObjectContext:(NSManagedObjectContext *)context
contactWasCreated:(BOOL *)isNew
通过将指针传递给BOOL,如果创建了ContactInfo,则可以将其设置为YES;如果返回已存在的那个,则可以将其设置为NO,如果您无法使用ContactInfo,则仍然可以返回nil回来。将BOOL作为指针传递的灵感来自于- (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为一个条目,而一个NSNumber为BOOL作为另一个条目。