Переделывание шаблона Master-Detail Application под себя и автоматическое создание IBOutlet с помощью control-dragging

Master-Detail Application шаблон универсального приложения предоставляет программисту split view controller интерфейс для iPad и navigator interface для iPhone, оба интерфейса работают с одной и той же моделью данных.


Сердцем данного шаблона являются master view controller (класс называется MasterViewController) и detail view controller (называется DetailViewController). MasterView Controller наследник UITableViewController, а DetailViewController наследник UIViewController.

Для master view controller, имеется table view который функционирует как pop-over (iPad) и navigator (iPhone). detail view controller различается на двух устройствах потому что на iPad имеет больше полей данных.

В версиях Xcode до 4.2, master view controllers назывались root view controllers.

Outlet-ы в MasterViewController и DetailViewController

По умолчанию в модели данных шаблона есть одна сущность Event и один атрибут - timeStamp.

Переделывание шаблона Master-Detail Application под себя

Создадим собственную модель:

После обновления модели данных, нужно обновить в MasterViewController.m следующую строку:
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@”Event”
inManagedObjectContext:self.managedObjectContext];

Нужно изменить Event на Customer, а timeStamp на name.

Также надо заменить timeStamp:

1) Change the Attribute for the Sort Descriptor
// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
initWithKey:@”name” ascending:NO];

2) Change valueForKey in configureCell
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath
*)indexPath
{
NSManagedObject *managedObject = [self.fetchedResultsController
objectAtIndexPath:indexPath];
cell.textLabel.text = [[managedObject valueForKey:@”name”] description];
}

3) Change setValue: forKey:
// If appropriate, configure the new managed object.
// Normally you should use accessor methods, but using KVC here avoids the
// need to add a custom class to the template.
[newManagedObject setValue:[NSDate date] forKey:@”timeStamp”];

Измените последнюю строку на:
[newManagedObject setValue:@”New Customer” forKey:@”name”];

4) Измените configureView в DetailViewController.m
- (void)configureView
{
// Update the user interface for the detail item.
if (self.detailItem) {
self.detailDescriptionLabel.text = [[self.detailItem valueForKey:@"name"]
description];
}
}


Спецификатор типа (type qualifier) IBOutlet используется только Interface Builder редактором, т.е. на этапе компиляции он исчезает.

IBOutletCollection - скорее макрос, чем спецификатор типа:
@property (strong, nonatomic) IBOutletCollection(UIView) NSArray *views;

Чтобы связать действие объявленное в файле интерфейса с элементом интерфейса на холсте используется спецификатор типа IBAction:
- (IBAction)myAction:(id)sender;
Во время компиляции:
- (void)myAction:(id)sender;

Автоматическое IBOutlet-ов







--