从强ID到NSDate键入Cast

时间:2015-11-02 07:14:58

标签: objective-c casting

我使用核心数据来保存我的数据,并且有一个名为" timestamp"被定义为" NSDate"。我使用我的帮助器类通过以下代码从核心数据中获取数据对象:

- (id)getMaxValue:(NSString *)entityName forProperty:(NSString *)propertyName {

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:entityName];

    fetchRequest.fetchLimit = 1;
    fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:propertyName ascending:NO]];

    NSError *error = nil;

    id maxValue = [self.context executeFetchRequest:fetchRequest error:&error].firstObject;

    if ([maxValue count]) {
        [self.context rollback];

        return [maxValue valueForKey:propertyName];
    }
    else {
        return nil;
    }

}

在我的控制器中,我使用以下代码检查是否有返回的结果,我得到它的时间戳:

id maxGroupsDate = [self.generalModel getMaxValue:@"MyEntityName" forProperty:@"timestamp"];
if (maxGroupsDate != nil) {
    maxGroupsDate = (NSDate*) maxGroupsDate;
    NSTimeInterval maxGroupsTimestamp = maxGroupsDate.timeIntervalSince1970;
}

但是它会导致这样的错误:

Property 'timeIntervalSince1970' not found on object of type '__strong id'

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

此声明无效:

maxGroupsDate = (NSDate*) maxGroupsDate;

相反,引入指定类型的新变量,并在转换之前检查值为NSDate

if ([maxGroupsDate isKindOfClass:[NSDate class]]) {
    NSDate *date = (NSDate *)maxGroupsDate;
    NSTimeInterval maxGroupsTimestamp = date.timeIntervalSince1970;
}

最后一句话也没有太大作用,但我猜你只是为了说明而添加了。