Нужно ли мне более одного постоянного магазина? - PullRequest
0 голосов
/ 07 июля 2010

Я пытаюсь создать приложение для листинга, которое поддерживается основными данными. Первая страница позволяет вам создать столько списков, сколько вы хотите, и дать им имена. Нажав на имя в первом представлении, вы попадете в тот фактический список, где вы можете создавать элементы в этом списке. Однако, если я создаю 3 списка, каждый из них имеет одинаковые данные. Нужен ли отдельный магазин с каждой первой ячейкой просмотра? Кроме того, если я делаю, как я могу создать новый магазин с каждой новой добавленной ячейкой? Спасибо за любую помощь.!

альтернативный текст http://www.tckdeveloper.com/Tutorials/iPhone/Screen%20shot%202010-07-07%20at%208.11.52%20AM.png

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

//This is the second view that holds the list items
RootViewController *secondViewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];

secondViewController.managedObjectContext = [self managedObjectContext];

[self.navigationController pushViewController:secondViewController animated:YES];
[secondViewController release];

}

Rootview.m

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [[fetchedResultsController sections] count];
}


// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
return [sectionInfo numberOfObjects];
}


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

// Configure the cell.
[self configureCell:cell atIndexPath:indexPath];
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

return cell;
}


- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {

// Configure the cell to show the book's title
Book *book = [fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = book.title;
}


- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
// Display the authors' names as section headings.
return nil;
}


- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

if (editingStyle == UITableViewCellEditingStyleDelete) {

    // Delete the managed object.
    NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
    [context deleteObject:[fetchedResultsController objectAtIndexPath:indexPath]];

    NSError *error;
    if (![context save:&error]) {
        // Update to handle the error appropriately.
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        exit(-1);  // Fail
    }
}   
}

Ответы [ 2 ]

3 голосов
/ 07 июля 2010

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

В этом случае вы моделируете книги и предоставляете пользователю организацию этих книг в списке.Вам нужен объект книги для моделирования книг и объект списка для моделирования организации пользователей.(Это не обязательно должен быть «список», это может быть «коллекция», «полка» и т. Д. В зависимости от того, что вы пытаетесь смоделировать.)

Предположительно, каждая книга может быть в другом списке ив каждом списке может быть много книг.

Book {
    author:string;
    copyright:sting/date;
    item:(?);
    title:sting;
    list<<-(optional,nullify)-->>list.books
}

List {
    name:string;
    books<<--(optional,nullify)-->>book.list;
}

В вашем пользовательском интерфейсе контроллер выборок результатов (FRC) извлекает все объекты списка и затем отображает имя каждой из них в табличном представлении.Когда строка таблицы выбрана, вы нажимаете следующее представление и передаете ему NSSet, возвращенный list.books объекта списка, связанного с этой строкой.

В следующем табличном представлении каждая строка заполняется одним или несколькими атрибутами каждого объекта книги в переданном наборе.Когда строка выбрана, вы нажимаете на детальный вид книги и передаете ему объект книги, связанный с выбранной строкой.

Обратите внимание, что с точки зрения модели данных пользовательский интерфейс не имеет значения.Вы можете отображать данные в веб-представлении или даже в текстовой командной строке.Все, что заботит модель данных - это содержимое сущностей и логические отношения между ними.

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

2 голосов
/ 07 июля 2010

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

Вам нужна модель данных, которая соответствует вашим требованиям.List ----- ListEntry.

На первой странице отображаются все объекты «List», после выбора списка отображаются все «ListEntries», связанные с «List».

...