对象变为NIL

时间:2014-05-27 13:48:34

标签: ios objective-c pointers exc-bad-access

我是iOS的初学者,我遇到了一个我无法单独解决的问题。

Cnx.h:

NSString* _ip;
int * _port;

@interface Cnx : NSObject
-(int*) getPort;
-(void) setPort: (int*) pPort;

Network.h:

Cnx* _lan;
Cnx* _wan

@interface Network: NSObject
-(Cnx*) getLan;
-(Cnx*) getWan;
-(void) setLan: (Cnx*) pCnx;
-(void setWan: (Cnx*) pCnx;

Manager.h:

Network * _network;
@interface Manager: NSObject <NSXMLParserDelegate>
-(Network*)getXml; // Xml parsing fill _network return correct object (not nil)

在我看来.m:

-(id) init {
    self = [super init];
    if(self) {
        Network *_net = [[[Manager alloc] init] getXml];
    }
    return self;
}

-(void) anotherMethod {
    // Want to access to _net value, but object is nil..
}

我的Bp对象正确填充,但是当我不想使用它时,他变成了#n;&#34; nil&#34;。我知道这是一个指针的故事,但我没有找到解决方案...... 我希望我的例子是明确的。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您要在_net方法中声明init值,而不是在班级中全局

所以你应该在property

中有@interface这样的内容
@property (nonatomic, strong) Network *net;

和代码:

-(id) init {
    self = [super init];
    if(self) {
        _net = [[[Manager alloc] init] getXml];
    }
    return self;
}

你的代码也完全错了,你应该这样做:

@interface Cnx : NSObject {
    NSString *ip;
}

@property (nonatomic) int port;

@proeprty因为我发现您使用的是 getter setter 方法,而@property自动 {{ 1}}所以你有一个默认的 setter getter 方法。

@synthesized变量是普通实例。

很明显,你不清楚 ObjC 是如何工作的(也许也是OOP?)。所以我鼓励你仔细阅读一下。