У меня не было проблем после следующего учебника: http://www.raywenderlich.com/1797/how-to-create-a-simple-iphone-app-tutorial-part-1. По сути, в этом учебном пособии описано создание простого представления таблицы, заполненного данными из NSMutableArray, и последующего сверления в DetailView каждого элемента.Добавление NSMutableArray в TableView во второй вкладке из AppDelegate
Затем я попытался улучшить то, что у меня было, создав TabViewController и имея созданный Table View как «элемент табуляции 2» этого контроллера.
Это сломало автоматическое население таблицы.
Код, используемый для заполнения таблиц из AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
Person *person1 = [[Person alloc] initWithName:@"Monica"
balance:420
thumbImage:[UIImage imageNamed:@"01.jpg"]
fullImage:[UIImage imageNamed:@"01_t.jpg"]];
Person *person2 = [[Person alloc] initWithName:@"Ross"
balance:630
thumbImage:[UIImage imageNamed:@"02.jpg"]
fullImage:[UIImage imageNamed:@"02_t.jpg"]];
Person *person3 = [[Person alloc] initWithName:@"Rachel"
balance:420
thumbImage:[UIImage imageNamed:@"03.jpg"]
fullImage:[UIImage imageNamed:@"03_t.jpg"]];
NSMutableArray *persons = [NSMutableArray arrayWithObjects:person1, person2, person3, nil];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *initialViewController = (UIViewController *)[storyboard instantiateViewControllerWithIdentifier:@"RootViewController"];
self.window.rootViewController = initialViewController;
TableViewController * peopleTableViewController = [storyboard instantiateViewControllerWithIdentifier:@"PersonTableViewController"];
[peopleTableViewController setPersons: persons];
// Override point for customization after application launch.
return YES;
}
«человек» представляет собой массив экземпляров лица, которое является собственностью TableViewController. Ниже население таблицы на основе массиву "лиц из TableViewController.m:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"PersonCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
//For each person
Person *person = [self.persons objectAtIndex:indexPath.row];
cell.textLabel.text = person.name;
cell.imageView.image = person.thumbImage;
cell.detailTextLabel.text = [person getPrice];
return cell;
}
Наконец, раскадровка находится здесь: http://i.stack.imgur.com/9axs8.png
И просто повторно итерацию, это все компилируются нормально, но во время тестов таблица пуста после открытия вкладки # 2 (где контроллер табличного представления существует в соответствии с раскадрой). Это работало до того, как я добавил вкладки.
Я все еще очень новичок в Objective C, поэтому, пожалуйста, дайте мне знать, есть ли какая-либо другая информация, которую вы можете потребовать.
Обратите внимание, что «человек» является NULL на TableViewController [viewDidLoad], но он правильно установлен, когда я проверяю в нижней части AppDelegate [didFinishLaunchingWithOptions] – fantom
Не уверен, что это, так как я обычно не использовать '-instantiateViewControllerWithIdentifier' но, возможно, '-viewDidLoad' tableViewController вызывается до того, как вы установили' person' ivar на контроллер (т. е. в '-instantiate ...'). Это объясняет 'NULL'. Вы можете попробовать сделать '[tableView reloadData]' в '-viewWillAppear:' и посмотреть, поможет ли это. –