Master Detail Storyboard:表格视图未显示单元格(Objective-C)

时间:2012-08-22 15:55:56

标签: objective-c storyboard

我遇到了主viewController没有显示任何单元格的麻烦。情况就是这样:

该应用使用了故事板。

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

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

我添加了对象并制作了一个cell / detailView或其他。

由于某种原因,细胞不会出现!!!

这是文件:

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

1 个答案:

答案 0 :(得分:1)

这是一个老问题,但在开始使用表格视图开发时,有一个意外的空表视图是一个常见的问题,所以希望这个答案对某人有用。

当您的表格视图缺少单元格时,请检查以下内容:

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

以上是MasterViewController.m中的一些需要注意的问题:

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

如果没有看到CraftingList的代码,就无法准确确定问题所在。但是,考虑到问题的年龄,我怀疑JomanJi已经自己解决了这个问题。