比较两个NSDate对象的相等性会产生意外结果

时间:2014-02-01 09:19:04

标签: ios iphone objective-c

我正在运行此for循环,如果满足条件,则删除indexValue。我正在比较两个NSDate对象,由于某种原因它不起作用。根据日志,NSDate个对象完全匹配。

请在这里指导我。

代码

for (int u=0 ; u<arraywithDateAddedKeyss.count ; u++)
        {
            NSLog(@"arraywithDateAddedKeyss: %@ == Array 5: %@",arraywithDateAddedKeyss[u],oldArray[5]);

            if (arraywithDateAddedKeyss[u] == oldArray[5])
            {
                [arraywithDateAddedKeyss removeObjectAtIndex:u];

                [userDefaults setObject:arraywithDateAddedKeyss forKey:@"arraywithReminderDateKeys"];

                [userDefaults synchronize];


                NSLog(@"Object Removed from array1");


            }
        }

NSLog数据

arraywithDateAddedKeyss: 2014-02-01 09:01:20 +0000 == Array 5: 2014-02-01 09:01:20 +0000

4 个答案:

答案 0 :(得分:5)

您无法使用==比较两个日期。

==比较指针相等性,这意味着您正在检查对象标识而不是相等。 (值得一读:http://nshipster.com/equality/

出于此目的使用NSDate NSDate *date1 = arraywithDateAddedKeyss[u]; NSDate *date2 = oldArray[5]; if ([date1 isEqualToDate:date2]) { ... } 方法

NSDate

有关比较{{1}}个对象的其他方法,请参阅:isEqualToDate:

答案 1 :(得分:0)

将您的ID更改为isEqual,您应该使用它而不是==:

if ([arraywithDateAddedKeyss[u] isEqual:oldArray[5]])
{
    //Add this log for debuting
    NSLog(@"Dates are equal");
    //.. your code here
}

希望得到这个帮助。

答案 2 :(得分:0)

您无法使用pointer运算符比较两个==。更好地使用代码下方.. See apple's doc

NSDate *date = oldArray[5];
for(NSDate *dateToBeCompare in arraywithDateAddedKeyss)
{
    if ([date compare:dateToBeCompare] == NSOrderedSame)
    {
           //Your code here...
    }
}

答案 3 :(得分:0)

将您的代码更改为:

 for (int u=arraywithDateAddedKeyss.count-1; u>=0 ; u--)
    {
        if ([arraywithDateAddedKeyss[u] compare:oldArray[5]] == NSOrderedSame)
        {
            [arraywithDateAddedKeyss removeObjectAtIndex:u];
            [userDefaults setObject:arraywithDateAddedKeyss forKey:@"arraywithReminderDateKeys"];
            [userDefaults synchronize];
        }
    }

注意:如果要删除某个索引处的对象,则必须将数组从末尾循环到开头