Какой шаблон проектирования использует UITableView для заполнения и каковы преимущества настройки делегата и источника данных? - PullRequest
0 голосов
/ 25 сентября 2011

Какой шаблон проектирования использует UITableView для заполнения и каковы преимущества? Это шаблон делегата? Причина, по которой я спрашиваю, состоит в том, что это не просто делегат, но и источник данных. Похоже, что это похоже на MVC.

Я только что просмотрел несколько учебных пособий онлайн, их \ мой код работает, но, похоже, я упускаю суть. Я заканчиваю все эти методы в моем главном контроллере.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 10;//any number based on datasource size.
}

// 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] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }

    // Set up the cell...
    cell.text = [names objectAtIndex:indexPath.row];//names is an array.
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
}

Это приложение на основе представления. Должно ли это быть в отдельном контроллере. В противном случае это выглядит просто грязно и излишне просто. Я вовсе не говорю, что цель C или apple неправильная, а просто то, что я новичок, и упускаю из виду весь смысл этой установки делегата и источника данных.

Подводя итог, может кто-нибудь объяснить, пожалуйста:

1-В чем преимущество этой настройки делегата и источника данных?
2-Как называется этот шаблон дизайна?
3-Должен ли я иметь отдельный контроллер (в приложении на основе представления)?

Ответы [ 2 ]

1 голос
/ 25 сентября 2011

Изучите n-уровневые методологии проектирования.

Большинство всех шаблонов предназначены для создания кода, который можно адаптировать к изменениям (и менее подвержен ошибкам).

Преимущество здесь в том, что эти части, абстрагированные от вашего контроллера представлений, обеспечат большую гибкость и в идеале меньше головной боли для поддержки кода. Если ваши требования меняются, или ваши данные, вы должны изменить этот файл. Принимая во внимание, что с изолированным источником данных вы можете в конечном итоге просто изменить этот один файл. Более важно с данными, так как они имеют тенденцию быть внешними и, возможно, созданы какой-то другой сущностью, это часто изменяется. Также может измениться стратегия хранения, вы можете перейти от XML к основным данным, не влияя на контроллер представления, делегат или представления.

Что касается делегата, что, если дизайн изменится, и эти же данные будут повторно использованы в другом месте. Если делегат не привязан к этому контроллеру представления, это становится простым вопросом повторного использования кода делегата, где это необходимо.

Затем добавьте другие усложняющие факторы, может быть, вы подкласс UITableView. Возможно, вы отображаете одни и те же данные в двух разных местах, и в обоих случаях вы используете подкласс UITableViewCell. Возможно, требования не относятся к двум разным представлениям, но здесь у этого контроллера представления есть возможность отобразить подробную версию и краткую версию.

Пища для размышлений.

1 голос
/ 25 сентября 2011
  1. На языке Apple, delegate реализует методы обратного вызова, которые изменяют поведение пользовательского интерфейса, а dataSource предоставляет данные. В более крупном приложении вы можете использовать два разных объекта в качестве делегата и источника данных по отдельности.

  2. Я не знаком с официальной терминологией, извините ...

  3. Зависит от размера вашего приложения. Даже если вы просто используете appDelegate, рекомендуется добавить

     #pragma mark -- table view delegate methods
     ...methods...
     #pragma mark -- table view data source methods
     ...more methods...
    

    так, чтобы список методов хорошо отображался внутри Xcode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...