2014-09-05 61 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與此字符串值

相關問題