Ключ-значение кодирования представляет собой механизм для доступа к свойству объекта косвенно, с помощью строк для идентификации свойств, а не через вызов аксессора или доступ к ним непосредственно через переменных экземпляра. Что это значит. Допустим у Вас есть таблица с множеством колонок, каждое имя колонки можно превратить в ключ и обращаться по ключу вместо индекса колонки, ведь так проще, да и запомнить название колонки проще чем ее индекс.
В данном примере мы не будем работать с таблицами, а реализуем некий класс Books (Книги). Основное что нам требуется для книги это "Автор книги", "Название книги" и "Количество страниц в книге".
Итак добавили новый класс наследованный от NSObject:
Books.h :
#import <Foundation/Foundation.h>
@interface Books : NSObject
@property (strong) NSString *bookAuthor;
@property (strong) NSString *bookName;
@property int pageCount;
@end
#import "Books.h"
@implementation Books
@end
#import <Cocoa/Cocoa.h>
#import "Books.h"
@interface AppDelegate : NSObject <NSApplicationDelegate> {
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]];
Результат - добавлена третья книга в массив-список книг с помощью KVC.
0 коментарі:
Отправить комментарий