2014-09-05 58 views
-1

我试图设置iPhone的Web服务URL 在登录视图中逻辑应该是: - 是否已设置服务URL?如果是的话,使用保存的默认值,如果没有提示。目标C - 在类实现中使用非静态方法

webServiceCall.h

@property (nonatomic,weak) NSString *webServiceUrlStr; 
// getter and setter for webServiceUrlStr 
- (NSString *) webServiceUrlStr; 
- (void) setwebServiceUrlStr: (NSMutableString *) theUrl; 

webServiceCall.m

- (NSString *) webServiceUrlStr 
{ 
    return _webServiceUrlStr; 
} 


- (void) setwebServiceUrlStr: (NSMutableString *) theUrl 
{ 
    _webServiceUrlStr = theUrl; 
    NSLog(@"Setting webServiceUrlStr = %@",_webServiceUrlStr); 
} 

在我loginviewcontroller我称之为:

if([self.webServiceCall webServiceUrlStr] != nil) 
{ 
    ....set view stuff here 
} 

其工作正常。 现在我已经从我的观点设定的URL我想用它在WebServiceCall类

webServiceCall.m

//Basic method for calling a webservice with soap 
+ (NSData *) callWebMethodWithSoapAction:(NSString*) soapAction withSoapEnvelop:  (NSString *) soapEnvelop 
{ 
    NSString *wsURL = [self webServiceUrlStr]; <-- No Known class for selector 'webServiceUrlStr' 
    NSURL *webserviceUrl = [NSURL URLWithString:wsURL]; 
....etc 

使webServiceURLStr静态解决了上述错误,但然后让未知的方法来我loginviewcontroller

+0

为什么'callWebMethodWithSoapAction:withSoapEnvelop:'静态?使其成为实例功能。 – mostruash 2014-09-05 10:47:51

+0

当你在Objective-C中声明一个属性时,你的getter和setter将被自动合成/生成。除非您想添加其他行为,例如除了设置/获取变量到getter/setter之外,你不需要自己实现它们。因此,您可以从WebServiceCall.m中删除webServiceUrlStr和setwebServiceUrlStr的定义: – mmccomb 2014-09-05 10:49:39

+0

您不能在'Class'方法中使用'Instance'方法/变量。你需要创建Class的实例并调用你的方法。更好的选项是创建类“webServiceCall”的'SharedInstance'并用它来访问'Class'方法中的变量或方法。 – 2014-09-05 10:50:51

回答

0

感谢您的答复......这是通过执行以下操作

WebServiceCall.m解决了,我宣布一个静态VAR

static NSString *webServiceUrlStr 

: 然后更改getter和setter静态和参照新的变量

+ (NSString *) webServiceUrlStr 
    { 
    return webServiceUrlStr; 
    } 


+ (void) setwebServiceUrlStr: (NSMutableString *) theUrl 
{ 
    webServiceUrlStr = theUrl; 
    NSLog(@"Setting webServiceUrlStr = %@",_webServiceUrlStr); 
    } 

我loginViewController类:

// static ref 
if([WebServiceCall webServiceUrlStr] != nil) 
{ 
    ....set view stuff here 
} 
0

当方法不需要任何对象的STATE时,在对象上定义的静态方法。 callWebMethodWithSoapAction:withSoapEnvelop: definetly需要对象状态 - webServiceUrlStr,所以它不应该是静态的。如果只有一个webServiceCall对象所需 - 使用singletone图案或只是全球varialbe与此字符串值

相关问题