2012-03-29 9 views
0

私はTableViewを持っています。私のデータソースはSQLiteデータベースです。私はnumberOfRowsInSection:メソッドのいくつかのメッセージ(私はメッセージIDとそれのテキストを知っている)にいくつかのコメントを数えようとしています。viewDidLoad()でメソッドを呼び出す。 indexPathを使用する

-(NSInteger)numberOfCommentsForMessage:(NSIndexPath *)indexPath { 
    MDAppDelegate *appDelegate = (MDAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    Comments *comment = (Comments *)[appDelegate.comments objectAtIndex:indexPath.row]; 
    if (MessageID == [comment.messageID integerValue]) { 
     numberOfCommentsForMessage++; 
    } 
    NSLog(@"number of comments = %i",numberOfCommentsForMessage); 
    return numberOfCommentsForMessage; 
} 

NSLogでも機能しません。私はこの方法がviewDidLoad()で呼び出されるべきだと思いますが、その方法が正しいかどうかはわかりません。

編集

Comments.h

@interface Comments : NSObject { 
    NSString *messageID; 
    NSString *commentText; 
} 

@property (nonatomic, retain) NSString *messageID; 
@property (nonatomic, retain) NSString *commentText; 

-(id)initWithName:(NSString *)mID commentText:(NSString *)cText; 

私は前のビューから取得するメッセージID:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
      MessageText:(NSString *)messageText 
      MessageDate:(NSString *)messageDate 
      MessageID:(NSInteger)messageID; 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     MessageText = [NSString stringWithString:messageText]; 
     MessageDate = [NSString stringWithString:messageDate]; 
     MessageID = messageID; 
    } 
    return self; 
} 
+0

これ以上のコードが必要です。 MessageIDが定義されている場所とComments.hヘッダーファイルを投稿してください。 – Sam

+0

しかし、今から 'numberOfCommentsForMessage:'はどこから呼びますか?それはまったく呼ばれていますか? –

+0

2回以上呼び出す場合は、カウンターを常に増やしています。コメントが10つある場合、numberOfCommentsForMessageは最初に10回、次に20回、30回などになります。これは、インスタンス変数の代わりにあなたのメソッド、私のポストを参照してください。 –

答えて

1

また、働いていない内容を正確に把握するために興味深いものになるだろう。あなたのアプリケーションはNSLogでクラッシュするか、または間違ったメッセージ数を返しますか?

numberOfCommentsForMessageをメソッドから戻すので、numberOfCommentsForMessageのスコープをメソッド内のローカル変数に縮小することが望ましいです。

-(NSInteger)numberOfCommentsForMessage:(NSIndexPath *)indexPath { 
    NSInteger numberOfComments = 0; 
    MDAppDelegate *appDelegate = (MDAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    Comments *comment = (Comments *)[appDelegate.comments objectAtIndex:indexPath.row]; 
    if (MessageID == [comment.messageID integerValue]) { 
     numberOfComments++; 
    } 
    NSLog(@"number of comments = %d",numberOfComments); 
    return numberOfComments; 
} 
+0

アプリケーションがクラッシュしていません。私はこの方法がまったく呼び出されないと思います。しかしなぜ 'numberOfCommentsForMessage'はローカル変数ではありませんか?私がそれを合成したとしても? – RomanHouse

+0

あなたは値を返してインスタンス変数をインクリメントするので、バグやアンチパターンのように見えます。 クラッシュしていなければ、何が起こっていて、間違っていると思いますか? –

+0

すべてのエラー、その他のバグ。おそらく、このメソッドはまったく呼び出されません。だから私はviewDidLoadでそれを呼び出す方法を尋ねています。 – RomanHouse

関連する問題