我正在构建一个在表格视图中显示帖子的 iphone 应用程序。每个帖子都标有用户的当前位置,我正在努力将其显示在详细文本标签中。后模型包括这些属性
@property (nonatomic, strong) NSString *content;
@property (strong) CLLocation *location;
在索引视图中,我像这样配置单元格:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
[self configureCell:cell forRowAtIndexPath:indexPath];
return cell;
}
- (void)configureCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
Post *post = [self.posts objectAtIndex:indexPath.row];
cell.textLabel.numberOfLines = 0;
cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;
cell.textLabel.text = post.content;
这将正确返回帖子的内容。但是,当我尝试在字幕中包含 lat/lng 时,它会崩溃。这会导致崩溃并引发不兼容的指针类型异常“来自 CLLocation 的 NSString”:
cell.detailTextLabel.text = post.location;
这是有道理的,因为 .text 需要一个字符串,并且 location 在字典中初始化,如下所示:
- (id)initWithDictionary:(NSDictionary *)dictionary {
self = [super init];
if (!self) {
return nil;
}
self.content = [dictionary valueForKey:@"content"];
self.location = [[CLLocation alloc] initWithLatitude:[[dictionary nonNullValueForKeyPath:@"lat"] doubleValue] longitude:[[dictionary nonNullValueForKeyPath:@"lng"] doubleValue]];
return self;
}
那么如何返回字幕标签中的位置呢?我还想显示一个时间戳并怀疑它是一个类似的解决方案。在我的后期模型实现文件中,我 #import "ISO8601DateFormatter.h" 从日期格式化字符串,同样我有:
static NSString * NSStringFromCoordinate(CLLocationCoordinate2D coordinate) {
return [ NSString stringWithFormat:@"(%f, %f)", coordinate.latitude, coordinate.longitude];
}
但我不确定如何将这一切联系到一个简单的 detailTextLabel 中。
任何帮助将非常感激。
编辑
我取得了这么大的进步:lat 和 lng 显示整数——但它不是正确的 lat/lng,即它实际上没有读取正确的整数。
cell.detailTextLabel.text = [NSString stringWithFormat:@"at (%f, %f)", post.location];
显示的 lat 和 lng 是这样的:0.00,-1.9 应该是:lat":"37.785834","lng":"-122.406417。所以它实际上并没有读取“post.location”行的末尾那么我怎样才能让它显示正确的数据呢?