投稿を表形式で表示する 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;
これにより、投稿の内容が正しく返されます。ただし、字幕に緯度/経度を含めようとすると、クラッシュします。これによりクラッシュが発生し、互換性のないポインター型の例外「CLLocation からの NSString」が発生します。
cell.detailTextLabel.text = post.location;
.text は文字列を想定しており、場所は次のように辞書で初期化されるため、これは理にかなっています。
- (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に結び付ける方法がわかりません。
どんな助けでも大歓迎です。
編集
私はこの量の進歩を遂げました:緯度と経度は整数を表示しますが、それは適切な緯度/経度ではありません。つまり、実際には正しい整数を読み取っていません。
cell.detailTextLabel.text = [NSString stringWithFormat:@"at (%f, %f)", post.location];
表示される緯度と経度は次のとおりです: lat":"37.785834","lng":"-122.406417. したがって、実際には「post.location」という行の末尾を読み取っていません。正しいデータを表示するにはどうすればよいですか?