Свойство не найдено, хотя оно должно быть - PullRequest
0 голосов
/ 03 октября 2018

Это странная ошибка.

У меня есть это в шапке:

#import "UIKit/UIKit.h"

@interface ProxyProfileObject : NSObject <NSCoding> {
    NSString *profileName;
    NSString *ipAddress;
    NSString *port;
}

-(void) setProfileName:(NSString *)string;
-(NSString*) getProfileName;
-(void) setIP:(NSString *)string;
-(NSString*) getIP;
-(void) setPort:(NSString *)string;
-(NSString*) getPort;

@end

И это в реализации:

#import "ProxyProfileObject.h"

@interface ProxyProfileObject()

@end

@implementation ProxyProfileObject

-(void) setProfileName:(NSString *)string{
    profileName = string;
}

-(NSString*) getProfileName{
    return profileName;
}

-(void) setIP:(NSString *)string{
    ipAddress = string;
}

-(NSString*) getIP{
    return ipAddress;
}

-(void) setPort:(NSString *)string{
    port = string;
}

-(NSString*) getPort{
    return port;
}

// Encoding stuff
- (id)initWithCoder:(NSCoder *)decoder {
    if (self = [super init]) {
        self.profileName = [decoder decodeObjectForKey:@"profileName"];
        self.port = [decoder decodeObjectForKey:@"port"];
        self.ipAddress = [decoder decodeObjectForKey:@"ip"];

    }
    return self;
}

- (void)encodeWithCoder:(NSCoder *)encoder {
    [encoder encodeObject:profileName forKey:@"profileName"];
    [encoder encodeObject:ipAddress forKey:@"ip"];
    [encoder encodeObject:port forKey:@"port"];

}

@end

Я не уверенпочему это так.Это не должно быть сделано, поскольку ipAddress - это то же самое, что порт или имя профиля.

Это два файла.Теперь вы сами можете увидеть, как ipAddress не работает.

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Вы объявляете переменные экземпляра, а не свойства.Просто поместите директиву @property перед строками.

@interface ProxyProfileObject : NSObject <NSCoding> {}
@property NSString *profileName;
@property NSString *ipAddress;
@property NSString *port;

Редактировать: Не писать явные методы получения и установки.Используйте (безошибочные) синтезированные средства доступа, предоставляемые объявлением @property.

0 голосов
/ 03 октября 2018
  • В вашем заголовке NSString *ipAddress объявляет ivar.
  • I реализация self.ipAddress относится к свойству.
  • Вы не указали такого свойства.Отсюда ошибка.

После редактирования ваша проблема становится очевидной:

Вы не объявляете метод -(void)setIpAddress:(NSString *)address;

Вот чтозаставит Xcode позволить вам использовать синтаксис свойства (точечная нотация) для сеттера, даже если это не фактическое свойство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...