我有一个继承自NSObject的类WebServices。我正在使用xcode4.2和ARC打开。 当我创建类时,NSObject中没有其他方法可以使用viewDidLoad或init。
问题在于,当我尝试调用self.something或[self someMethod]时,Xcode将我的代码标记为红色并抱怨:
将Objective-C指针类型'Class'隐式转换为C指针类型'struct obj_class *'需要桥接
请帮忙。为什么不像你这样调用“this”的cocoa并得到你所在的对象?
// 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)
viewDidLoad
方法不适合NSObject
子类。这是UI
子方法中UIViewController
的方法。
现在,指出self.something
OR [self someMethod]
,这与NSObject
子类非常吻合。您需要向我们展示您遇到问题的代码。
仅供您参考(我认为您应该在完成此操作后开始为iOS开发):
答案 1 :(得分: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"];
导致实例变量myString
设置为boom
,并且注销“myString的控制台设置为繁荣”。