2

私はUITableView入りUIViewController、コンセントを介して接続し、デリゲートとデータソースが自己に割り当てられました。numberOfSectionsInTableViewnumberOfRowsInSection使用して試しましたが、呼び出されてNSLogcellForRowAtIndexPathませんが、私のコードは次のようになります

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

    NSLog(@" cellForRowAtIndexPath ");

    static NSString *CellIdentifier = @"CurrencyCell";

    CurrencyCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[CurrencyCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] ;
    }
    new *Obj = [appdelegate.array objectAtIndex:indexPath.row];


    cell.CurNameLabel.text = Obj.C_Name;
    cell.textLabel.text = @"sdfnhsdfndsio;";
    NSLog(@"C_Name %@", Obj.C_Name);

    return cell;
}

誰でも電話できますか?私は間違いを犯しています。よろしくお願いします

4

5 に答える 5

6

返されるnumberOfSectionsInTableViewnumberOfRowsInSectionが 0 のようです。この場合、cellForRowAtIndexPath は呼び出されません。

上記のコメントから..「YourAppDelegate」変数nullまたは yourArrayのようですnull。これらのデリゲートにブレークポイントを保持して、それらによって返される値を確認してください

于 2012-10-19T10:39:06.637 に答える
4

以下のように、.hファイルにデリゲートとデータソースを追加してみてください。

@interface AddProjectViewController : UIViewController<
UITableViewDataSource,UITableViewDelegate>
.....
@end

viewDidLoad:このコードを入れた後。

    - (void)viewDidLoad
   {
        yourTableView.delegate= self;
        yourTableView.dataSource=self;
   }

最後に、これをメソッドで試して、0より大きい値numberOfRowsInSectionを返します。int

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [yourArray count];//or any int value
}
于 2012-10-19T10:41:00.800 に答える
2

返されたnumberOfSectionsInTableViewnumberOfRowsInSectionが 0 であるか、別の理由である可能性があります

以下のポイントをよく確認してください

1 XIB から TableView を作成している場合は、データソースを設定し、ファイルの所有者に委譲する必要があります。

dataSourecプログラムで作成している場合は、デリゲートとデータソースを以下のように設定し、 anddelegateを採用することを忘れないでUItableViewください.h

   YourViewController : UIViewController<UITableViewdelegate, UITableViewDatasource>

UITableViewを作成している行の直後にコードの下の行を置きます

        tableViewObj.delegate= self;
        tableViewObj.dataSource=self

2datasource (配列の名前に関係なく) データがあるかどうかを慎重に確認します。

  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
     {  
      int  numberOfRows= [datasource count];
      return numberOfRows;
      //  here check does the `numberOfRows` have nonzero value or just 0
      if it retunes 0 then cellForAtIndexPath would not call .
   }

お役に立てば幸いです

于 2012-10-19T10:48:23.593 に答える
1

アプリでマルチスレッドの概念を有効にした場合、reloadDataメソッド onを呼び出してtableview cellForRowAtIndexPathも呼び出されないことがあります。したがって、次のように realod メソッドを呼び出します。

[self performSelectorOnMainThread:@selector(reloadTable) withObject:self waitUntilDone:NO];

それはうまくいくかもしれません。

- (void)reloadTable
{
    [self.tableView reloadData];
}

マルチスレッド環境にない場合は、tableviews delegateanddatasourceが null でないことを確認する必要があります。

于 2012-10-19T11:01:20.533 に答える
0

「numberOfRowsInSection」メソッドで配列の数値を確認してください。値を返す前に配列を出力します。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"%@",returnedArray);
    return [returnedArray count];//
}

また、メソッドで静的な数の行を送信して確認することもできます。

そのメソッドで配列が null になっているようです。

問題が解決することを願っています。

于 2012-10-19T10:45:27.207 に答える