2016-10-29 6 views
-1

2つの異なるテーブルセル識別子(2つの異なるカスタムセル)を使用するテーブルビューがあります。 field_swaptimeがnullの場合、テーブルビューで1つのセルを使用するようにします。 field_swaptimeにデータが含まれている場合は、もう一方のデータを使用します。つまり、何らかの理由で、私のテーブルビューはChatTableCellを使用しているだけです(そして、field_swaptimeの内容にかかわらずSwapDetailTableCellではありません)。なぜ誰がこのことが分かっているのですか?2つの異なるカスタムテーブルビューセル識別子を使用しないTableView

> THIS IS DATA { 
>  body = "28-10-2016 18:05\n"; 
>  endswaptime = "28-10-2016 19:05"; 
>  name = Brittany; 
>  "node_title" = "Title"; 
>  "published at" = "Saturday, October 29, 2016 - 00:05"; 
>  swaptime = "28-10-2016 18:05"; 
>  targetuser = 93; 
>  uid = 47; } 2016-10-28 21:37:16.196852 [2594:626224] Message Received at Saturday, October 29, 2016 - 00:05 2016-10-28 
> 21:37:16.197365 [2594:626224] THIS IS DATA { 
>  body = "04-11-2016 12:54\n"; 
>  endswaptime = "13-12-2016 21:54"; 
>  name = Brittany; 
>  "node_title" = "Title!"; 
>  "published at" = "Friday, October 28, 2016 - 23:55"; 
>  swaptime = "04-11-2016 12:54"; 
>  targetuser = 93; 
>  uid = 47; } 2016-10-28 21:37:16.197688n [2594:626224] Message Received at Friday, October 28, 2016 - 23:55 2016-10-28 
> 21:37:16.198268 [2594:626224] THIS IS DATA { 
>  body = "why"; 
>  endswaptime = "<null>"; 
>  name = Brittany; 
>  "node_title" = "Re:"; 
>  "published at" = "Friday, October 28, 2016 - 23:50"; 
>  swaptime = "<null>"; 
>  targetuser = 93; 
>  uid = 47; } 

:とfield_swaptimeはいくつかのケースではデータを持っており、他ではヌルであっても、同じカスタムセルがすべての結果のために使用されている - ここで

は、「データ」(self.messages)が出してくれるものですそして、ここに私のコードです:

.M

- (void)viewDidLoad { 
    [super viewDidLoad]; 


    static NSString *ChatTableIdentifier = @"ChatTableViewCell"; 
    static NSString *ChatTableIdentifier2 = @"SwapDetailTableViewCell"; 


    UINib *nib = [UINib nibWithNibName: ChatTableIdentifier bundle:nil]; 
    [self.tableView registerNib:nib forCellReuseIdentifier: ChatTableIdentifier]; 

    UINib *nib2 = [UINib nibWithNibName: ChatTableIdentifier2 bundle:nil]; 
    [self.tableView registerNib:nib2 forCellReuseIdentifier: ChatTableIdentifier2]; 

} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *ChatTableIdentifier = @"ChatTableViewCell"; 
    static NSString *ChatTableIdentifier2 = @"SwapDetailTableViewCell"; 


    NSDictionary *data = [self.messages objectAtIndex:indexPath.row]; 


    if (![data objectForKey:@"field_swaptime"]) { 

    NSLog(@"THIS IS DATA %@", data); 

     ChatTableViewCell *cell = (ChatTableViewCell *)[tableView dequeueReusableCellWithIdentifier:ChatTableIdentifier forIndexPath:indexPath]; 


     NSString *userName = [data objectForKey:@"name"]; 
     [cell.sendingUser setText:userName]; 

     NSString *messageBody = [data objectForKey:@"body"]; 
     [cell.messageDisplayed setText:messageBody]; 

     NSString *timeReceived = [data objectForKey:@"published at"]; 
     NSLog(@"Message Received at %@", timeReceived); 
     [cell.timeStamp setText:timeReceived]; 


    return cell; 

       } 

    else { 


     SwapDetailTableViewCell *cell = (SwapDetailTableViewCell *)[tableView dequeueReusableCellWithIdentifier:ChatTableIdentifier2 forIndexPath:indexPath]; 



     NSString *Time = [data objectForKey:@"field_swaptime"]; 
     NSLog(@"This is time %@", Time); 
     [cell.startTime setText:Time]; 

     NSString *TimeEnd = [data objectForKey:@"field_endswaptime"]; 
     [cell.endTime setText:TimeEnd]; 

     return cell; 

    } 

    } 
+0

なぜ「field_swaptimeにデータがあるのに」*と言いますか?あなたの質問のデータ出力には、 'field_swaptime'というキーのインスタンスが1つしかありません。 'swaptime'のいくつかの例がありますが、' field_swaptime'の例はありません。 – rmaddy

+0

...あなたは私の質問にちょうど答えたかもしれません。奇妙ですが、データを "swaptime"に投稿するときは、 "field_swaptime"を使用します(これは私が投稿しているDrupalフィールドの完全名です)。しかし、おそらく私はちょうど "swaptime"このインスタンスで使用する必要がありますか?試してみる。 –

+0

あなたはその変更を行う必要がありますが、それでも助けにはなりません。 'swaptime'値の1つに対して' NSNull'インスタンスがあるので、新しい問題が発生します。 – rmaddy

答えて

0

からアクセス値にしようとするときは、いくつかの問題を持っています。

開始するには、field_swaptimeというようなキーはありません。キーはswaptimeです。しかし、一度参照を修正すると、いくつかの値には実際の日付値があり、一部には "null"値(NSNull)があることを知る必要があるので、キーの存在の簡単なチェックは不十分です。

これを試してみてください:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSDictionary *data = self.messages[indexPath.row]; 
    NSLog(@"THIS IS DATA %@", data); 
    id swaptime = data[@"swaptime"]; 
    if ([swaptime isKindOfClass:[NSString class]]) { 
     // There is a valid "swaptime" value 
     static NSString *ChatTableIdentifier2 = @"SwapDetailTableViewCell"; 

     SwapDetailTableViewCell *cell = (SwapDetailTableViewCell *)[tableView dequeueReusableCellWithIdentifier:ChatTableIdentifier2 forIndexPath:indexPath]; 

     NSString *time = data[@"swaptime"]; 
     cell.startTime.text = time; 

     NSString *timeEnd = data[@"endswaptime"]; 
     cell.endTime.text = timeEnd; 

     return cell; 
    } else { 
     static NSString *ChatTableIdentifier = @"ChatTableViewCell"; 

     ChatTableViewCell *cell = (ChatTableViewCell *)[tableView dequeueReusableCellWithIdentifier:ChatTableIdentifier forIndexPath:indexPath]; 

     NSString *userName = data[@"name"]; 
     cell.sendingUser.text = userName; 

     NSString *messageBody = data[@"body"]; 
     cell.messageDisplayed.text = messageBody; 

     NSString *timeReceived = data[@"published at"]; 
     cell.timeStamp.text = timeReceived; 

     return cell; 
    } 
} 

上記のコードは、配列や辞書の値にアクセスするための近代的な構文を使用するなど、他のささいなことの多くをクリーンアップします。また、変数がstaticの変数を必要な範囲内に収まるように移動します。

+0

奇妙なことに、上記のコードでは、field_swaptimeを 'swaptime'に変更すると、実際に両方のカスタムテーブルビューセルが使用され始めました。ハワイ。しかし、上記のように、swaptimeがnullの場合もあるため、アプリがクラッシュします。つまり、私はこの答えであなたのコードに置き換えました。アプリがクラッシュすることはありませんが、今では2つの別個のテーブルビューセルを使用しないことに戻り、ChatTableViewCellのみを使用します:/ –

+0

あなたはそれを行いました! :Dハハハ。 Omgありがとう!これは何時間もありました。あなたはクリスマスのリストにいます! –

関連する問題