NSObject调用self给出了XCode错误

时间:2013-04-17 05:09:24

标签: cocoa-touch ios6 xcode4.2 implicit-conversion nsobject

我有一个继承自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

2 个答案:

答案 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的控制台设置为繁荣”。