如何获得TimeZone的缩写

时间:2014-07-07 23:30:49

标签: ios uitableview nstimezone

我想创建一个时区列表。 但是我在timeZone.abbreviation上遇到了以下错误。

- [__ NSCFString缩写]:无法识别的选择器发送到实例0x19cb80b0

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    // Configure the cell...
    NSTimeZone *timeZone = [[NSTimeZone knownTimeZoneNames] objectAtIndex:indexPath.row];
    cell.textLabel.text = timeZone.abbreviation;  // <- Error Here
    cell.detailTextLabel.text = timeZone.description;
    cell.accessoryType = (timeZone == self.timeZone)? UITableViewCellAccessoryCheckmark :UITableViewCellAccessoryNone;

    return cell;
}

我试图在互联网上搜索,但到目前为止我找不到解决方案。 请给我一些建议。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

尝试这样的事情:

NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:[[NSTimeZone knownTimeZoneNames] objectAtIndex:indexPath.row]];
cell.textLabel.text = timeZone.abbreviation;  // <- Error Here
cell.detailTextLabel.text = timeZone.description;

您当前的代码获取 NSStrings 的数组,而不是NSTimeZones。这应该会给你一个NSTimeZone,然后你可以获得abbreviation属性。

答案 1 :(得分:0)

如此处所述:https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/classes/NSTimeZone_Class/Reference/Reference.html#//apple_ref/occ/clm/NSTimeZone/knownTimeZoneNames

[NSTimeZone knownTimeZoneNames] 

返回时区的字符串ID列表 - 因此您的时区对象实际上包含NSString而不是NSTimeZone对象。所以你必须这样做:

NSString *timeZoneID = [[NSTimeZone knownTimeZoneNames] objectAtIndex:indexPath.row];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:timeZoneID];

获取真正的timezone对象来调用

上的缩写