0

我在主视图控制器没有显示任何单元格时遇到问题。这是这种情况:

该应用程序使用情节提要。

当应用程序启动时,它会转到 navigationController

按下一个按钮并连接到表 ViewController 并设置为“推送”到它。

我已经添加了对象并制作了一个单元格/详细信息视图或其他任何内容。

由于某种原因,单元格不会出现!!!

这是文件:

MasterViewController.h:

#import <UIKit/UIKit.h>
#import "CraftingDetail.h"
#import "Crafting.h"

@class CraftingList;

@interface CraftingMaster : UITableViewController

@property (strong, nonatomic) CraftingDetail *detailViewController;
@property (strong, nonatomic) CraftingList *CL;

@end

MasterViewController.m:

#import "CraftingMaster.h"
#import "CraftingList.h"

@interface CraftingMaster ()

@end

@implementation CraftingMaster

@synthesize detailViewController = _detailViewController;
@synthesize CL;

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
        self.CL = [[CraftingList alloc] init];
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;

    // Uncomment the following line to display an Edit button in the navigation bar for     this view controller.
     self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return  self.CL.count;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return self.CL.count;
}

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

    // Configure the cell...

    cell.textLabel.text = [self.CL craftingAtIndex:indexPath.row].Title;

    return cell;
}

/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath   *)indexPath
{
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
*/

/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:      (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
       // Delete the row from the data source
       [tableView deleteRowsAtIndexPaths:@[indexPath]     withRowAnimation:UITableViewRowAnimationFade];
    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
       // Create a new instance of the appropriate class, insert it into the array, and  add a new row to the table view
    }   
}
*/

/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath   *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
}
*/

/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
     // Return NO if you do not want the item to be re-orderable.
    return YES;
}
*/

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.
    /*
     <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc]   initWithNibName:@"<#Nib name#>" bundle:nil];
     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:detailViewController animated:YES];
     */
}

@end

DetailViewController.h:

#import <UIKit/UIKit.h>

@interface CraftingDetail : UIViewController

@property (strong, nonatomic) IBOutlet UIImageView *Image;
@property (strong, nonatomic) IBOutlet UITextView *Description;

@end
4

1 回答 1

1

这是一个老问题,但是在开始使用表视图进行开发时,出现意外空的表视图是一个常见问题,因此希望这个答案对某人有用。

当您的表格视图没有单元格时,您需要检查以下几点:

  • 您的数据源对象(self.CL在这种情况下)是否有效?(即。它们是否!= nil指向正确的对象?)
  • 是否numberOfSectionsInTableView:返回大于零的整数值?
  • 是否tableView:numberOfRowsInSection: 返回一个大于零的整数值?

以下是上面 MasterViewController.m 中需要注意的几个问题:

  • InitWithStyle:在情节提要中实例化视图控制器时不会执行。相反,initWithCoder:应该使用。我怀疑这是 JomanJi 痛苦的根源,因为这导致self.CL没有被实例化。(顺便说一句,数据源对象/属性:CL应该通过将值_CL直接分配给 ivar 而不是属性来实例化。请参阅“初始化属性,点表示法”以了解原因)。
  • 由于返回(可能)与numberOfSectionsInTableView:as tableView:numberOfRowsInSection:(即“ return self.CL.count;”)相同的值,表格视图将显示与每个部分中的单元格相同数量的部分,每个部分的单元格包含与其他部分相同的数据. 我怀疑这种效果是开发人员想要的。(这当然是除非count访问器方法CraftingList做了一些非常奇怪的事情)。

如果不查看代码,CraftingList就无法准确确定问题所在。然而,考虑到问题的年龄,我怀疑 JomanJi 已经自己解决了。

于 2013-03-13T10:33:43.307 回答