objective C - 在类实现中使用非静态方法

时间:2014-09-05 10:43:43

标签: ios objective-c

我正在尝试为iPhone设置网络服务网址 逻辑应该是: 在登录视图 - 已设置服务URL? ,如果是这样,使用保存的默认值,如果没有提示。

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不知道该方法

2 个答案:

答案 0 :(得分:0)

当方法不需要任何对象状态时,在对象上定义的静态方法。 callWebMethodWithSoapAction:withSoapEnvelop:绝对需要对象状态 - webServiceUrlStr,所以它不应该是静态的。如果只需要一个webServiceCall个对象 - 使用单线模式或仅使用此字符串值的全局变量

答案 1 :(得分:0)

感谢您的回复......通过以下方式解决了这个问题

WebServiceCall.m,我声明了一个静态var

static NSString *webServiceUrlStr

: 然后将getter和setter更改为static并引用新变量

+ (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
}