0

投稿のフィードを読み込む iOS アプリがあります。テーブル セルのテキスト ラベルには、post.content が表示されます。post.location とタイムスタンプを表示するように detailTextLabel を取得しようとしています。タイムスタンプは機能しますが、場所は座標 (0.000, 0.000) を返します。これがコードです

    - (void)configureCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
        Post *post = [self.posts objectAtIndex:indexPath.row];

cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.textLabel.numberOfLines = 0;
    cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;
    cell.textLabel.text = post.content;
    cell.detailTextLabel.textColor=[UIColor lightGrayColor];
    cell.detailTextLabel.font = [UIFont boldSystemFontOfSize:9];

        cell.detailTextLabel.text = [NSString stringWithFormat:@"posted on %@ at (%f, %f)", post.timestamp,  (post.location.coordinate.latitude, post.location.coordinate.longitude)];
       }

タイムスタンプは正しく、座標は正しくありません。投稿モデルには CLLocation プロパティがあります。そして私は宣言します:

static NSString * NSStringFromCoordinate(CLLocationCoordinate2D coordinate) {
    return [ NSString stringWithFormat:@"(%f, %f)", coordinate.latitude, coordinate.longitude];
}

次のように近くの投稿を取得します。

+ (void)fetchNearbyPosts:(CLLocation *)location
          withBlock:(void (^)(NSArray *posts, NSError *error))completionBlock
{
    NSDictionary *parameters = @{
                                 @"lat": @(location.coordinate.latitude),
                                 @"lng": @(location.coordinate.longitude)
                                 };

そして、このロケーション ディクショナリを使用して JSON から更新します

NSDictionary *locationDictionary = [dictionary objectForKey:@"location"];
self.location = [[CLLocation alloc] initWithLatitude:[[locationDictionary valueForKey:@"lat"] doubleValue] longitude:[[locationDictionary valueForKey:@"lng"] doubleValue]];

これらすべての間に - detailTextLabel が適切な座標を表示するのを妨げているのは何ですか? それはdetailTextLabelコードの何かだと思います-適切な座標名を呼び出していないので、ゼロを返しています-実際、post.location.coordinateセクション全体を削除すると、ラベルはまったく同じものを返します. 場所を表現するためにいくつかの異なる方法を試しましたが、ほとんどの代替方法では例外が発生しますが、これはうまくいくはずですか? 何か案は?

- (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;
}

そして、これが実際の JSOn です。私のマッピングに奇妙な点がある場合に備えて..

[{"content":"Test","postid":1,"lat":"34.13327300486596","lng":"-118.1054221597022", "created_at":"2013-08-06T14:59:42Z"}]
4

1 に答える 1

0
cell.detailTextLabel.text = [NSString stringWithFormat:@"posted on %@ at (%f, %f)",
    post.timestamp,  
    (post.location.coordinate.latitude, post.location.coordinate.longitude)];

緯度と経度を囲む余分な括弧を削除します。

cell.detailTextLabel.text = [NSString stringWithFormat:@"posted on %@ at (%f, %f)",
    post.timestamp, 
    post.location.coordinate.latitude, 
    post.location.coordinate.longitude];
于 2013-08-07T13:16:15.077 に答える