2016-08-31 8 views
0

私はチャットアプリを作成した後に、その目的を失った、私はarrayChatにメッセージを追加します。アレイは、いくつかの時間

-(void)msgRecevied:(NSMutableDictionary *)messageContent 
{ 
    NSString *m = [messageContent objectForKey:kMsg]; 
    [messageContent setObject:[m substituteEmoticons] forKey:kMsg]; 
    self.arrayTemp = messageContent; 

    [self.arrayChat addObject:self.arrayTemp]; 

    [_tblChat reloadData]; 

    if(self.arrayChat.count > 1){ 

     NSIndexPath *topIndexPath = [NSIndexPath indexPathForRow:self.arrayChat.count-1 
                 inSection:0]; 

     [self.tblChat scrollToRowAtIndexPath:topIndexPath 
          atScrollPosition:UITableViewScrollPositionMiddle 
            animated:YES]; 
    } 
} 

しかし、私がメッセージを送信するとき、私はそれの後、しばらくの間、私のデバイスを入れてしばらくすると、それが追加しますオブジェクトはarrayChatになりますが、tableViewにはロードされません。テーブルをリロードすると、最後に失われたオブジェクトが表示されます。arrayChatから失われました。私はここにも@synthesize arrayTemp;

どれでも間違いを

@interface ViewController : UIViewController 
{ 

    NSMutableArray *arrayChat; 
} 
@property (strong,nonatomic) NSMutableArray *arrayChat; 

と:

私のようなarrayChatを宣言しますか?

EDIT

私は他のクラスに私のarrayChatを追加し、私はアプリ上でその配列にアクセスするには、そのクラスを使用し、それが働いているが、私は配列にオブジェクトを追加するときに問題が発生したがAppdelegateにそのクラスを宣言私のテーブルをすぐに再読み込みしないで、私は最後に追加されたオブジェクトを配列に表示するその時間に私のチャットビューをボタン上で拡大しています。イムは、ビューを拡大したときに、ここで

は私のコードです:

-(IBAction)onClickViewLarge:(id)sender{ 

    CGRect screenRect = [[UIScreen mainScreen] bounds]; 
    CGFloat screenWidth = screenRect.size.width; 
    CGFloat screenHeight = screenRect.size.height; 


    if (!isShow) { 

     [_btnOpen setImage:[UIImage imageNamed:@"ico_expand"] forState:UIControlStateNormal]; 
     [UIView animateWithDuration:0.5 animations:^{ 

      if(screenHeight >= 736) 
       self.view.frame = CGRectMake(0,66 , screenWidth, screenHeight - 66); 
      else if (screenHeight >= 667) 
       self.view.frame = CGRectMake(0,60 , screenWidth, screenHeight - 60); 
      else if (screenHeight >= 568) 
       self.view.frame = CGRectMake(0,51 , screenWidth, screenHeight - 51); 
      else if (screenHeight >= 480) 
       self.view.frame = CGRectMake(0,43 , screenWidth, screenHeight - 43); 
     }]; 
     isShow = true; 

    } else { 
     [_btnOpen setImage:[UIImage imageNamed:@"ico_open"] forState:UIControlStateNormal]; 
     [UIView animateWithDuration:0.5 animations:^{ 
      self.view.frame = CGRectMake(screenWidth - 250,screenHeight - 450 , 250, 450); 
     }]; 
     isShow = false; 
    } 

    if([app.Glb.arrayChat count] > 0) 
    { 
     [self.tblChat reloadData]; 

     NSIndexPath *topIndexPath = [NSIndexPath indexPathForRow:app.Glb.arrayChat.count-1 
                 inSection:0]; 

     [self.tblChat scrollToRowAtIndexPath:topIndexPath 
          atScrollPosition:UITableViewScrollPositionMiddle 
            animated:YES]; 
    } 

} 

これが解決される方法は?

+0

問題はグローバルarrayTempオブジェクトであると思います。あなたのmsgReceviedメソッドの中で宣言してみてください – Arun

+0

何も効果がありません。 – Kabali

+0

あなたのarrayTempも強いですか?それを強くしないでください。私はしばらくしてからその設定がなくてもいいと思う。 –

答えて

0

グローバルに宣言するarrayTempオブジェクトの問題だと思います。その値を上書きするたびにarrayChat自体の内容を上書きします。このような方法でローカルに宣言してみてください

-(void)msgRecevied:(NSMutableDictionary *)messageContent 
{ 
    NSString *m = [messageContent objectForKey:kMsg]; 
    [messageContent setObject:[m substituteEmoticons] forKey:kMsg]; 
    NSMutableDictionary *arrayTemp = [messageContent mutableCopy]; 

    [self.arrayChat addObject:arrayTemp]; 

    [_tblChat reloadData]; 

    if(self.arrayChat.count > 1){ 

     NSIndexPath *topIndexPath = [NSIndexPath indexPathForRow:self.arrayChat.count-1 
                 inSection:0]; 

     [self.tblChat scrollToRowAtIndexPath:topIndexPath 
          atScrollPosition:UITableViewScrollPositionMiddle 
            animated:YES]; 
    } 
} 
+0

私のコードは時間がかかりましたが、アプリケーション内で他のものを実行した後に失われました,,,, – Kabali

+0

アレイの最後のオブジェクトが1回またはn回だけ表示されていますか? – Arun

+0

メッセージを送信または受信するときにオブジェクトを追加します。 – Kabali

関連する問題