2013-04-17 33 views
0

我有一個從NSObject繼承的WebServices類。我正在使用xcode4.2和ARC打開。 當我創建該類時,NSObject lie viewDidLoad或init中沒有其他方法。給自己的NSObject調用給出XCode錯誤

的問題是,當我嘗試調用self.something或[自我的someMethod] Xcode的標誌我的紅色代碼,並抱怨:

Objective-C的指針類型「類」的隱式轉換到C指針類型'struct obj_class *'需要橋樑鑄造

請幫忙。爲什麼不可可以像java那樣稱呼「this」並獲取你所在的對象?

// WebService.h file 
@interface WebService : NSObject 

@property (weak, nonatomic) NSString * myString; 
+(void) setAndPrintMyString:(NSString*) someString; 

@end 



//WebService.m file 


#import "WebService.h" 
@implementation WebService 

@synthesize myString=_myString; 

+(void) printMyString:(NSString*) someString{ 
[self setMyString:someString];  //XCode does not allow 
NSLog(@"myString is set to %@",self.myString); //XCode dose not allow 
} 

@end 
+0

你可以顯示你正在使用的代碼 –

+0

@ Paul.s我在工作中添加了一些代碼,所以我很抱歉如果代碼有錯別字,我沒有在發佈之前運行它。 –

+0

您發佈的代碼對我來說工作正常 - 或者您需要發佈實際代碼,以便我們可以看到真正的問題或Xcode正在播放 –

回答

0

聲明與+的方法意味着它是一種類方法。在類方法中,self指的是類本身,在你的情況下它是[WebService class]。如果你聲明和實例方法(使用-),那麼方法self內將引用實例,這是你想要的。

要設置一個實例變量 - 你需要一個實例

WebService *webService = [[WebService alloc] init]; 
webService.myString = @"some string"; 

現在使你的方法工作,你需要有一個-代替+這使得它的一個實例方法聲明它

- (void)printMyString:(NSString *)someString 
{ 
    [self setMyString:someString]; 
    NSLog(@"myString is set to %@",self.myString); 
} 

現在

[webService printMyString:@"boom"]; 

結果t他將實例變量myString設置爲boom,並且控制檯註銷`myString設置爲繁榮狀態「。

0

viewDidLoad方法也不適合與NSObject子類。這是UI的一種方法,它將在UIViewController的子類中出現。

現在,即將點約self.something[self someMethod],這與NSObject子類很好地工作。您需要向我們展示您正在面臨問題的代碼。

僅供參考(我想你應該通過這個打算後,開始爲iOS開發):