0

投稿を表形式で表示する 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」という行の末尾を読み取っていません。正しいデータを表示するにはどうすればよいですか?

4

1 に答える 1