Базовые данные - вставка нового объекта, проверка наличия тех же объектов, обработка возврата - PullRequest
4 голосов
/ 15 декабря 2011

Я работаю с Базовыми данными и получил две сущности (Учетная запись, Контакт), где одна учетная запись может иметь несколько контактов (отношения «один ко многим»).

При вставке нового объекта я хочу проверить, принадлежит ли телефонный номер нового контакта уже существующему контакту.Если номер существует, должно быть уведомление для пользователя.

В «ContactAddViewController.m» вызывается следующий метод, где contactData представляет собой NSMutableDictionary со значениями и ключами для нового контакта (вводится в текстовые поля).

[ContactInfo findOrCreateContact:contactData inManagedObjectContext:context];

В «AccountInfo».m "задан запрос на телефон с предикатом и значением моего текстового поля.Если номер телефона не существует, контакт будет добавлен к объекту «Контактная информация» - если он существует, метод возвращает 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.
}

1 Ответ

4 голосов
/ 15 декабря 2011

Вы имеете в виду возвращаемое значение из этого метода?

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

Сначала присваивайте имя функции состояния find OR create, поэтому с таким именем вы должны возвращать объект в обоих случаях, тот, который у вас естьнайти или только что созданный.Это поможет избежать путаницы.

Во-вторых, ваш возвращаемый тип - это объект, поэтому вы должны вернуть nil или объект.

Таким образом, на данный момент вам нужно решить, хотите ли вы соблюдать свое наименование или нет, но, скажем, хотите.
У вас может быть такой метод:

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

Передав указатель на BOOL, вы можете установить его в YES, если ContactInfo был создан, и NO, если вы возвращаете уже существующее, и вы все равно можете вернуть nil, если у вас не было возможности вернуть ContactInfo.,Передача 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 в качестве другой записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...