找不到属性,尽管应该找到

时间:2018-10-02 21:10:06

标签: objective-c

这是一个奇怪的错误。

我在标题中有这个

#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 :(得分:1)

  • 在标头NSString *ipAddress中声明一个ivar。
  • 我的实现self.ipAddress引用了一个属性。
  • 您未声明此类财产。因此是错误。

编辑后,您的问题显而易见:

您没有声明方法-(void)setIpAddress:(NSString *)address;

这就是使Xcode允许您为设置程序使用属性语法(点符号)的原因-即使它不是实际的属性。

答案 1 :(得分:1)

您是在声明实例变量,而不是属性。只需将@property指令放在行首。

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

编辑:不要编写显式的getter和setter。使用@property声明提供的(无错误)综合访问器。