为什么这个'if'语句失败了?

时间:2013-12-29 21:10:55

标签: objective-c ios7 magicalrecord

我正在尝试使用MagicalRecord确定我是否在CoreData中有重复记录。为此,我将更新的数据与第一个现有记录进行比较:

这是我用来搜索的代码:

    //  set up predicate to find single appointment
if(selectedApptKey.length > 0)  {
    NSPredicate *predicate =  ([NSPredicate predicateWithFormat:
                                @"((aApptKey == %@) && (aStartTime == %@) && (aEndTime == %@) && (aServiceTech == %@))",
                                selectedApptKey, tStartDate, tEndDate, tStaff]);
    NSLog(@"\n\nselectedApptKey: %@\ntStartDate: %@\ntEndDate: %@\ntStaff: %@",selectedApptKey, tStartDate, tEndDate, tStaff);

    ai = [AppointmentInfo MR_findFirstWithPredicate:predicate inContext:localContext];

    if((ai.aApptKey == selectedApptKey) &&
       (ai.aStartTime == tStartDate) &&
       (ai.aEndTime == tEndDate) &&
       (ai.aServiceTech == tStaff))  {

        updateFlag = YES;
    }
}

这是我用来搜索现有记录的谓词数据:

  

selectedApptKey:RolfMarsh3911   tStartDate:2013-12-29 20:15:00 +0000   tEndDate:2013-12-29 22:15:00 +0000   tStaff:Kellie

这是从上面的代码中获得的结果记录:

Printing description of ai:
<NSManagedObject: 0xb705430> (entity: AppointmentInfo; id: 0xb7bca00        <x-coredata://649CD00C-3C88-4447-AA2B-60B792E3B25F/AppointmentInfo/p22> ; data: {
aApptKey = RolfMarsh3911;
aEndTime = "2013-12-29 22:15:00 +0000";
aImage = nil;
aNotes = "";
aPosH = 200;
aPosW = 214;
aPosX = 0;
aPosY = 231;
aServiceTech = Kellie;
aServices = "";
aStartTime = "2013-12-29 20:15:00 +0000";
client = nil;
})

如您所见,记录和搜索数据是准确的。 Qustion是:为什么 if 语句失败(updateFlag没有设置为YES)?

1 个答案:

答案 0 :(得分:3)

您需要使用isEqualToString:而不是==,因为您要比较实际的对象值,而不是指针。假设这些都是字符串。如果您有一些日期对象,请使用isEqualToDate:

==总是比较指针,在这种情况下它们不相等,因为它们指向不同的对象。