У меня есть основная проблема, у меня есть два словарных ключа, которые мне нужно сравнить, но когда я это делаю, это не дает мне правильного ответа, так или иначе я не могу создать логику.Сравнение ключей NSDictionary не удается
Итак, у меня есть это в массиве словаря и json-массива, начиная с сервера Я хочу сравнить их, если событие существует в plist, делает определенную вещь, если не делает другую вещь;
ПРОБЛЕМА:
Согласно моей логике, если два события в PLIST равно двум событий пришедших с сервера, если логика должна быть напечатана на каждый словарь наступающего от сервера, поэтому в данном случае 2 раза общего, но в моем коде он печатается 4 раза. в основном он удовлетворяет условию каждый раз.
NSLog:
evreka find the id
evreka find the id
evreka find the id
evreka find the id
ИСТОЧНИК: в PLIST;
createList (
{
"end_date" = "2013-07-24";
ends = "13:07:00";
"event_id" = 173;
"event_name" = Static;
location = Asdad;
"root_folder" = "[email protected]";
"start_date" = "2013-07-24";
starts = "13:07:00";
"user_id" = 13;
},
{
"end_date" = "2013-07-25";
ends = "13:08:00";
"event_id" = 174;
"event_name" = "Event Delete";
location = Asdsad;
"root_folder" = "[email protected]";
"start_date" = "2013-07-25";
starts = "13:08:00";
"user_id" = 13;
}
)
Это пришедшего от сервера
responseobj (
{
"end_date" = "2013-07-24";
ends = "13:07:00";
"event_id" = 173;
"event_name" = Static;
location = Asdad;
"root_folder" = "[email protected]";
"start_date" = "2013-07-24";
starts = "13:07:00";
"user_id" = 13;
},
{
"end_date" = "2013-07-25";
ends = "13:08:00";
"event_id" = 174;
"event_name" = "Event Delete";
location = Asdsad;
"root_folder" = "[email protected]";
"start_date" = "2013-07-25";
starts = "13:08:00";
"user_id" = 13;
}
)
КОД:
Сравнение кода;
if ([[NSFileManager defaultManager] fileExistsAtPath:dataPath]){
createList= [NSMutableArray arrayWithContentsOfFile:dataPath];
NSLog(@"createList %@",createList);
NSLog(@"responseobj %@",responseObj);
//compare plist and response object
for (int i=0; i<[responseObj count]; i++) {
NSDictionary *dataDict = [responseObj objectAtIndex:i];
NSString *event_name =[dataDict objectForKey:@"event_name"];
//NSString *event_id =[dataDict objectForKey:@"event_id"];
BOOL eventExistInPlist=NO;
for (int j=0; j<[createList count]; j++) {
NSDictionary *createDict = [createList objectAtIndex:i];
//NSString *create_id =[createDict objectForKey:@"event_id"];
NSNumber *create_id =[createDict objectForKey:@"event_id"];
if ([[dataDict objectForKey:@"event_id"] isEqual:[createDict objectForKey:@"event_id"]]) {
// if (create_id==event_id) {
NSLog(@"evreka find the id");
То, что я пробовал: Я попытался сравнить их как строки (isEqualtoString), числа (==) и IsEqual: метод, все они потерпели неудачу.
Что я делаю неправильно?
Во-первых, сделать вещи проще и менее запутанной путем извлечения значения '[dataDict objectForKey: @«event_id»]' вне внутреннего цикла и удерживая его в локальной переменной. (Я вижу, что вы сделали это и прокомментировали это. Почему?) И почему нет NSLogs значений, которые вы получаете - они, вероятно, быстро идентифицируют вашу проблему? –