0

デモ用の空のアプリを作成し、ビューにナビゲーション コントローラーを追加しました

UINavigationController *navBar = [[UINavigationController alloc]initWithRootViewController:objFirstViewControllerViewController];
[self.window addSubview:navBar.view];

その後、このように最初のView Controllerにテーブルビューを追加します。

UITableView* demotableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, 320, 400) style:UITableViewStylePlain];
demotableView.delegate = self;
demotableView.dataSource = self;
[self.view addSubview:demotableView];

そして、このように行関数のテーブルビューとメインセルのデリゲート関数

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
 NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
  cell.textLabel.text = @"Hello this is sample text";
cell.textLabel.minimumFontSize = 12;
cell.textLabel.adjustsFontSizeToFitWidth = TRUE;
cell.textLabel.font = [UIFont fontWithName:@"Copperplate" size:18];
return cell;
}

しかし、テーブルをスクロールするか、任意のセルをクリックして次のビューに移動すると、クラッシュして、クリックとスクロールでそれぞれ 2 つのエラーが発生します。

[__NSCFArray tableView:didSelectRowAtIndexPath:]
[__NSCFDictionary tableView:cellForRowAtIndexPath:]

以前のOSで適切に動作していたこのコードの何が間違っているのかわかりません

誰でも助けてくれますか?

行を選択したコードは次のとおりです

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
Second *anotherViewController = [[Second alloc] initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:anotherViewController animated:YES];

}

行の番号はこれです

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

return 15;
}
4

4 に答える 4

1

実際には、アプリを正常に実行するために行った変更は何であるかをARCを誤用しました。実際には、メモリリークが原因でクラッシュしていました。ローカルオブジェクトでデリゲートのクラスを参照しましたが、データを追加しようとしたときに解放されました。テーブルのデリゲートとデータソースは、リリースされた現在のクラスに物を追加しようとし、それらのメッセージ インスタンスからメッセージをスローします。以下のデリゲートクラスで、問題を解決しました。

.hファイルのデリゲート クラスで行ったこと:

 FirstViewControllerViewController *objFirstViewControllerViewController;

@property (strong, nonatomic)  FirstViewControllerViewController *objFirstViewControllerViewController;

その後、私のテーブルは適切に動作し始め、私が問題を抱えていたすべてのもの.

于 2012-04-10T11:02:52.497 に答える
0

コードをこれに置き換えて、試してください:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
  static NSString *CellIdentifier = @"Cell";

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if(cell == nil)
  {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

  }
  cell.textLabel.text = @"Hello this is sample text";

  cell.textLabel.minimumFontSize = 12;

  cell.textLabel.adjustsFontSizeToFitWidth = TRUE;

  cell.textLabel.font = [UIFont fontWithName:@"Copperplate" size:18];

  return cell;
}

お役に立てれば。

于 2012-04-10T07:16:47.960 に答える
0

これを試してください....

このようにテーブルビューを追加してください..

 productList = [[UITableView alloc] initWithFrame:CGRectMake(0,102, 320, 267) style:UITableViewStylePlain];
 productList.delegate = self;
 productList.dataSource = self;
 productList.backgroundColor = [UIColor clearColor];
 [self.view addSubview:productList];

これらのメソッドを追加します....

  #pragma mark Table view data source

  // Customize the number of sections in the table view.
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
      return 1;
   }


 // Customize the number of rows in the table view.
   - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
     return (your row count);
    }


 // Customize the appearance of table view cells.
  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
         cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]autorelease];
     }

 // Configure the cell.

         cell.textLabel.text = @"Title";
         cell.detailTextLabel.text = formattedString;
         cell.detailTextLabel.textColor = [UIColor darkGrayColor];

         return cell;

      }

  - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
      Second *anotherViewController = [[Second alloc] initWithNibName:nil bundle:nil];
     [self.navigationController pushViewController:anotherViewController animated:YES];

   }
于 2012-04-10T07:38:04.987 に答える
0

設定したので、セルの選択時 (クリック時) にクラッシュを解決する関数をdemotableView.delegate = self; 実装する必要があります。tabelView: didSelectRowAtIndexPath:

スクロールのクラッシュを解決するには、実装する必要があります

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

方法。

PS: : では、cellForRowAtIndexPath除くすべての行cell.textLabel.textが内側にある必要があります

if(cell == nil){
}

適切なメモリー管理ルールに従ってください

于 2012-04-10T07:22:29.797 に答える