2014-09-04 77 views
-1

的對象沒有找到我新的目標C和iOS目標C/iOS版 - 物業類型上

我試圖得到一個簡單的方法工作,但我得到的一個問題。

聲明和實現:

WebServiceCall.h

- (void) setwebServiceUrlStr: (NSMutableString *) newUrl; 

WebServiceCall.m

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

在隨後WebServiceCall.m我嘗試這樣做:

NSString *sUrl = [defaults objectForKey:@"sUrl"]; 
[self.setwebServiceUrlStr: sUrl]; 

最後一行產生以下錯誤:

住宅「setwebServiceUrlStr」上類型爲「WebServiceCall」

,如果我從聲明中刪除了參數,我沒有得到錯誤

+2

將最後一行更改爲[self setwebServiceUrlStr:sUrl]; (刪除點) – sha 2014-09-04 14:18:36

回答

0

現在你只有一個名爲setwebServiceUrlStr:的方法。你還沒有申報財產。要聲明一個屬性,你可以使用:

@property (nonatomic, strong) NSMutableString *webServiceUrlStr; 

一旦你擁有了它宣稱,您的二傳手會自動合成,你不需要重寫它,你有(即,你現在可以刪除方法)。你會覆蓋它的唯一原因是如果你需要不同的功能從默認設置相應的實例變量。

屬性的默認setter和getter是:propertyName(getter)和setPropertyName:(setter)。因此,要設置屬性,您可以撥打[self setPropertyName:var]使用不包含單詞「set」的點符號:self.propertyName = var

所以,你的代碼看起來像:

NSString *sUrl = [defaults objectForKey:@"sUrl"]; 
self.webServiceUrlStr = sUrl; 

注:我建議不使用可變的字符串在這裏,只是宣稱你的財產是一個NSString代替:

@property (nonatomic, copy) NSString *webServiceUrlStr; 

除非你明確需要改變屬性(非常罕見),你不應該讓它變得可變。

-1

你可以反對未找到不要將該屬性命名爲'new'。作爲參數應該沒問題。

@sha指出了錯誤。

應該

self.webServiceUrlStr = sUrl; 

,如果你正在訪問來自其他類的屬性。它應該是這樣的

WebServiceCall *webCall = [[WebServiceCall alloc] init] 

    [webCall SetWebServiceUrlStr:sUrl]; 
    or 
    webCall.webServiceUrlStr = sUrl; 
+0

這是錯誤的。'new'只有屬於方法名稱的一部分才具有特殊含義,而不是參數名稱。請參閱sha的評論以獲取答案。 – 2014-09-04 14:24:19

+0

變量的名稱在這裏沒有關係。問題是屬性沒有被正確使用。 – colinbrash 2014-09-04 14:24:56

+0

是的,沒錯。我想念讀了這個問題。我正在考慮命名屬性...作爲參數應該沒問題。我會改變它 – 2014-09-04 14:28:43