NSMutableArray KVC / KVO вопрос - PullRequest
       10

NSMutableArray KVC / KVO вопрос

0 голосов
/ 12 февраля 2011

Это образец из книги «Программирование какао для Mac OS X 3rd (HD)», глава 7 «Кодирование значения ключа. Наблюдение за ключами»

Вот код:

Person.h:

 #import <Foundation/Foundation.h>


 @interface Person : NSObject {
    NSString *personName;
    float expectedRaise;
 }
 @property (readwrite, copy) NSString *personName;
 @property (readwrite) float expectedRaise;

 @end

Person.mm:

#import "Person.h"
@implementation Person

@synthesize expectedRaise;
@synthesize personName;

- (id)init
{
    [super init];
    expectedRaise = 0.05;
    personName = @"New Person";
    return self;
}

- (void)dealloc
{
    [personName release];
    [super dealloc];
}

@end

MyDocument.h:

#import <Cocoa/Cocoa.h>

@interface MyDocument : NSDocument
{
    NSMutableArray *employees;
}

@property (retain) NSMutableArray *employees;

@end

MyDocument.mm:

#import "MyDocument.h"
#import "Person.h"

@implementation MyDocument

@synthesize employees;

- (id)init
{
    if (![super init])
        return nil;

    employees = [[NSMutableArray alloc] init];

    return self;
}
- (void)dealloc
{
    [employees release];
    [super dealloc];
}

- (void)windowControllerDidLoadNib:(NSWindowController *) aController


@end

И пример работает нормально. (Сначала пустая таблица, и вы можете добавить или удалить запись).

Теперь я попытался добавить некоторые записи в массив, чтобы в пустой таблице было что-тоfirst.

Вот что я пробовал (в методе init):

[self willChangeValueForKey:@"employees"];
Person *p1 = [[Person alloc] init];
[employees addObject: [NSData dataWithBytes: &p1 length: sizeof(p1)]];
[self didChangeValueForKey:@"employees"];

Но когда я строю и ошибаюсь, я получаю сообщение об ошибке:

[<NSConcreteData 0x422bf0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key personName.
......

Может ли кто-нибудь помочь мне отсюда? Заранее спасибо ^ _ ^

1 Ответ

3 голосов
/ 12 февраля 2011

Это кажется очень разумным ответом ... вы добавили NSData в свой массив с именем employees; исходя из имен и из KVC, вы, вероятно, намеревались добавить p1 в свой массив. Итак, попробуйте:

[employees addObject:p1];
...