NSDictionary: сравнение после MutableCopy

У меня есть следующие свойства:

@property (retain, nonatomic) NSMutableDictionary * firstStartTimeObject;
@property (retain, nonatomic) NSMutableDictionary * firstLocationNameObject;
@property (retain, nonatomic) NSMutableDictionary * firstLocationAddressObject;

@property (retain, nonatomic) NSMutableDictionary * secondStartTimeObject;
@property (retain, nonatomic) NSMutableDictionary * secondLocationNameObject;
@property (retain, nonatomic) NSMutableDictionary * secondLocationAddressObject;

// Вот как я делаю копии словарей:

-(DataClass *)copyObjects
{
    DataClass *newClass = [[DataClass alloc]init];
    newClass.firstStartTimeObject = [firstStartTimeObject mutableCopy];
    newClass.firstLocationAddressObject = [firstLocationAddressObject mutableCopy];
    newClass.firstLocationNameObject = [firstLocationNameObject mutableCopy];
    newClass.secondStartTimeObject = [secondStartTimeObject mutableCopy];
    newClass.secondLocationNameObject = [secondLocationNameObject mutableCopy];
    newClass.secondLocationAddressObject = [secondLocationAddressObject mutableCopy];

    return newClass;
}

// В другом классе я сравниваю их

if([myClass.firstStartTimeObject isEqualToDictionary:dataClass.firstStartTimeObject])
{
    [dataClass.firstStartTimeObject setValue:kCellBackGroundColor forKey:kBackGround];
}

if([myClass.firstLocationNameObject  isEqualToDictionary:dataClass.firstLocationNameObject])
{
    [dataClass.firstLocationNameObject setValue:kCellBackGroundColor forKey:kBackGround];
}

if([dataClass.firstLocationAddressObject  isEqualToDictionary:dataClass.firstLocationAddressObject])
{
    [dataClass.firstLocationAddressObject setValue:kCellBackGroundColor forKey:kBackGround];
}

if([myClass.secondStartTimeObject isEqualToDictionary:dataClass.secondStartTimeObject])
{
    [dataClass.secondStartTimeObject setValue:kCellBackGroundColor forKey:kBackGround];
}

if([myClass.secondLocationNameObject  isEqualToDictionary:dataClass.secondLocationNameObject])
{
    [dataClass.secondLocationNameObject setValue:kCellBackGroundColor forKey:kBackGround];
}

if([myClass.secondLocationAddressObject  isEqualToDictionary:dataClass.secondLocationAddressObject])
{
    [dataClass.secondLocationAddressObject setValue:kCellBackGroundColor forKey:kBackGround];
}

У меня есть настройки точек останова. Ключи / Значения при сравнении словарей идентичны, но кажется, что компилятор смотрит на них по-другому, поскольку никогда не выполняется условие, чтобы он попадал в фигурные скобки и достигал точки останова.

Я проверил ключи / значения через NSLog, и они идентичны. Я даже попробовал протокол с - (id)mutableCopyWithZone:(NSZone *)zone и получил такое же поведение.

Изменяет ли mutableCopy NSMutableDicitonary свою копию, чтобы, не меняя ее содержимого, сравнивать ее с исходным, а это не одно и то же? Я не могу понять, что я делаю неправильно!

1 ответ

Решение

Два словаря имеют одинаковое содержание, если в каждом из них содержится одинаковое количество записей, и для данного ключа соответствующие объекты значений в каждом словаре удовлетворяют требованиям isEqual: test. Вот как работает аналогичная задача. Так что проблема выглядит так, как будто ваше содержание не содержит одинаковое количество записей. Пожалуйста, перепроверьте свой изменяемый объект. И еще одна вещь, которую я заметил, это то, что вы, если вы сравниваете один и тот же класс данных, несмотря на наличие одного myclass.

Другие вопросы по тегам