Ключ-значение кодирования представляет собой механизм для доступа к свойству объекта косвенно, с помощью строк для идентификации свойств, а не через вызов аксессора или доступ к ним непосредственно через переменных экземпляра. Что это значит. Допустим у Вас есть таблица с множеством колонок, каждое имя колонки можно превратить в ключ и обращаться по ключу вместо индекса колонки, ведь так проще, да и запомнить название колонки проще чем ее индекс.
В данном примере мы не будем работать с таблицами, а реализуем некий класс Books (Книги). Основное что нам требуется для книги это "Автор книги", "Название книги" и "Количество страниц в книге".
Итак добавили новый класс наследованный от NSObject:
Books.h :
#importBooks.m - оставим пустым, т.к. остальное мы реализуем в классе AppDelegate@interface Books : NSObject @property (strong) NSString *bookAuthor; @property (strong) NSString *bookName; @property int pageCount; @end
#import "Books.h" @implementation Books @endВ AppDelegate.h создадим массив booksArray со списком книг. Ведь у нас будет не одна книга. Также не забудем подключить наш класс Books.
#importНа нашу форму поместим кнопку и сделаем связь кнопки с методом printListBooks.#import "Books.h" @interface AppDelegate : NSObject { NSMutableArray *booksArray; } @property (assign) IBOutlet NSWindow *window; - (IBAction)printListBooks:(id)sender; @end
В AppDelegate.m создадим несколько объектов книг и добавим их в массив который будет хранить список наших книг.
#import "AppDelegate.h" @implementation AppDelegate - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { booksArray = [[NSMutableArray alloc] init]; // Добавляем наши книги-объекты в массив обычным способом Books *firstBook = [[Books alloc] init]; [firstBook setBookAuthor:@"Т.Г. Шевченко"]; [firstBook setBookName:@"Кобзарь"]; [firstBook setPageCount:283]; [booksArray insertObject:firstBook atIndex:[booksArray count]]; Books *secondBook = [[Books alloc] init]; [secondBook setBookAuthor:@"И. Франко"]; [secondBook setBookName:@"Городские повести"]; [secondBook setPageCount:478]; [booksArray insertObject:secondBook atIndex:[booksArray count]]; }Организуем код для кнопки, которая будет выдавать список объектов из массива книг.
- (IBAction)printListBooks:(id)sender { for (Books *currentBook in booksArray) { NSLog(@"Книга: %@, Автор книги: %@, К-во страниц: %i", [currentBook bookName], [currentBook bookAuthor], [currentBook pageCount]); } } @endЗапустим и получим результат:
А как же KVC ? Все довольно просто. Добавим еще одну книгу, но теперь будем обращаться не к переменным нашего объекта, а по ключу (аналогично названию переменным) и будем задавать ему значение:
// Добавляем наши книги-объекты с помощью ключей (KVC) Books *threeBook = [[Books alloc] init]; [threeBook setValue:@"Леся Украинка" forKey:@"bookAuthor"]; [threeBook setValue:@"Боярыня" forKey:@"bookName"]; [threeBook setValue:@"184" forKey:@"pageCount"]; [booksArray insertObject:threeBook atIndex:[booksArray count]];Здесь bookAuthor, bookName, pageCount являются ключами, а Value - значениями для каждого ключа. Запустим наше приложение:
Результат - добавлена третья книга в массив-список книг с помощью KVC.
Немає коментарів:
Дописати коментар