我的tableview中的单元格无法显示任何内容。
- (void)viewDidLoad {
[super viewDidLoad];
testArray = [[NSMutableArray alloc] init];
}
如果单击该按钮,应用程序将转到下一个屏幕并显示该表。 (日志显示testString存储在testArray中)
- (IBAction)goNext:(id)sender {
for(int i=0; i<10; i++){
NSString *testString = @"Hello";
[testArray addObject:testString];
NSLog(@"myArray:\n%@", testArray[i]);
}
UIStoryboard *mainStoryBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [mainStoryBoard instantiateViewControllerWithIdentifier:@"test"];
[self presentViewController:vc animated:YES completion:nil];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return testArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellId = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
cell.textLabel.text = testArray[indexPath.row];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%d", (int)indexPath.row + 1];
return cell;
}
如果我这样做,将显示内容。
- (void)viewDidLoad {
[super viewDidLoad];
[self testArraySetup];
}
- (void)testArraySetup{
testArray = [NSMutableArray arrayWithArray:@[@"Pizza",@"Bread",@"Drinks"]];
}
非常感谢任何建议。
答案 0 :(得分:2)
如果要在单击Next按钮时将一个Controller A的测试数组传递给另一个UIViewController B,则应在UIViewController B中创建testArray的属性,在该属性中要显示tableView。
// UIVIewController A
@interface ViewControllerA ()
{
NSMutableArray * testArray;
}
- (void)viewDidLoad {
[super viewDidLoad];
testArray = [[NSMutableArray alloc] init];
}
- (IBAction)goNext:(id)sender {
for(int i=0; i<10; i++){
NSString *testString = @"Hello";
[testArray addObject:testString];
NSLog(@"myArray:\n%@", testArray[i]);
}
UIStoryboard *mainStoryBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
ViewControllerB *vc = [mainStoryBoard instantiateViewControllerWithIdentifier:@"test"];
vc.testArray = testArray;
[self presentViewController:vc animated:YES completion:nil];
}
// ViewController B
@interface ViewControllerB : UIViewController
@property (nonatomic,retain)NSMutableArray * testArray;
无需在UIViewController B的viewDidLoad中重新初始化testArray。否则它会将内存重新分配给testArray。
答案 1 :(得分:1)
这一行...
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
...如果重用队列中没有单元格(这是应用程序首次运行时的初始状态,而您尚未明确创建任何单元格),则不会创建单元格并返回nil。这意味着您的整个方法将返回nil(即,没有单元格)。
使用此功能时,您还需要检查cell == nil
,如果是,则需要使用以下内容自行创建新单元格:
if ( ! cell )
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
或者,您可以为标识符注册一个类,然后使用[tableView dequeueReusableCellWithIdentifier: forIndexPath:]
代替,这将根据您注册的类为您生成一个单元格。
有关两者之间差异的信息,请参阅:When to use dequeueReusableCellWithIdentifier vs dequeueReusableCellWithIdentifier : forIndexPath
答案 2 :(得分:1)
解决方案可能存在的问题:
1:您尚未将redeem.is_valid()
的{{1}}和datasource
正确设置为delegate
。
解决方案:在UITableView
或self
ViewDidLoad
2:您没有在故事板中为ViewDidAppear
建立正确的yourTableView.datasource = self;
yourTableView.delegate = self;
连接。
解决方案:创建IBOutlet
现在转到故事板,在连接检查器下,您可以通过控制拖动将您的属性与storyboard中的tableView连接。
3:从您的代码中,您TableView
中的@property (nonatomic, weak) IBOutlet UITableView *tableView;
似乎正在使用datasource
和delegate
方法,并且您正试图在TableView
中显示内容{1}}。
解决方案:您应该在相应的ViewControllerA
类中实现UITableView的ViewControllerB
和datasource
。
4:您没有正确初始化/重复使用delegate
。
解决方案:请参阅@ 海滩之子
的答案