Собственность / Синтез ошибок - PullRequest
1 голос
/ 05 сентября 2011

Извините, что продолжаю задавать основные вопросы здесь, но я не знаю, куда еще идти.Написал некоторый код с ползунком, текстовым полем и кнопками для увеличения ползунка, чтобы продемонстрировать кодирование значения ключа.Все работало, найди.Следующим шагом было использование 'property' и 'synthesize' вместо методов доступа и сеттера;

#import <Foundation/Foundation.h>
@interface KVCController : NSObject  {
    int fido;
}
@property(readwrite, assign) int fido;
@end

~~~~~

@implementation KVCController
@synthesize fido;

- (id)init{
    self = [super init];
    if (self) {
        // Initialization code here.
        [self setValue:[NSNumber numberWithInt:5] forKey:@"fido"];
        NSNumber *n = [self valueForKey:@"fido"];
        NSLog(@"fido = %@", n);
    }

    return self;
}
~~~~~~~
@end

Я получил неполную реализациюошибка @mplementation KVCController.Если я добавлю методы get и set для 'fido', это прояснится.Вторая ошибка возникает с @synthesize fido ;.Это говорит, что собственность должна быть объявлена ​​в реализации.Все правильно скопировано из книги, и, насколько я могу судить, оно выглядит так же, как и все другие варианты использования свойств и синтеза, на которые я смотрел.У кого-нибудь есть идеи о том, что я пропускаю или делаю неправильно?

Xcode 4.1 автоматически создает класс делегата, который я обычно игнорирую, если не работаю с делегатами.Я создал свой собственный класс для упражнения KVC и просто добавил в него объявления свойств / синтеза с соответствующими изменениями и получил ошибки.Я просто поместил объявления property / synthesize в класс делегата, переместил свой код IBAction в соответствующие места, переделал привязки и стер класс, который я создал, и все работало нормально.Должны ли объявления свойств / синтеза быть обработаны как материал делегата?

1 Ответ

2 голосов
/ 05 сентября 2011

неполная реализация означает, что у вас есть -(void)something, который может быть определен в вашем заголовке, который вы не используете в своем @implementation. Убедитесь, что в вашем заголовке нет неиспользуемых методов. в противном случае либо удалите их из заголовка, либо создайте метод в своей реализации.

- (void) dosomething
{
    /* blank for now */
}

если у вас есть -(void)dosomething в вашей реализации, определите его в заголовке.

#import <Foundation/Foundation.h>
@interface KVCController : NSObject  {
    int fido;
}
@property(readwrite, assign) int fido;
- (void) dosomething;
@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...