У меня есть следующие свойства: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 изменить свою копию на то, где без изменения какого-либо ее содержимого вы сравниваете ее с исходным кодом, и это не то же самое? Я не могу понять, что я делаю неправильно!
if ([dataClass.firstLocationAddressObject isEqualToDictionary: dataClass.firstLocationAddressObject]) почему это условие вы сравниваете как это? –
Что это значит? Мне нужно сравнить словари, чтобы узнать, изменилось ли какое-либо из значений для ключей. – user1107173
Нет, я имею в виду, что вы сравниваете свое состояние как для данных, так и для одного класса –