0

我有一个继承自 NSObject 的类 WebServices。我正在使用 xcode4.2 并打开了 ARC。当我创建类时,NSObject 中没有其他方法位于 viewDidLoad 或 init 中。

问题是当我尝试调用 self.something 或 [self someMethod] Xcode 将我的代码标记为红色并抱怨:

Objective-C 指针类型“Class”到 C 指针类型“struct obj_class*”的隐式转换需要桥接转换

请帮忙。为什么 cocoa 不像 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
4

2 回答 2

0

viewDidLoad方法不适合NSObject子类。这是一种UI将存在于UIViewController子类中的方法。

现在,谈到self.somethingOR [self someMethod],这对子类非常有效NSObject。您需要向我们展示您面临问题的代码。

仅供参考(我认为您应该在完成此操作后开始为 iOS 开发):

于 2013-04-17T12:13:18.610 回答
0

声明一个方法+意味着它是一个类方法。在类中的方法self是指类本身,在您的情况下是[WebService class]. 如果您声明了实例方法(使用-),那么方法内部self将引用实例,这就是您想要的。

要设置实例变量 - 您需要一个实例

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

现在要使您的方法工作,您需要使用 a 声明它,-而不是+使其成为实例方法

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

现在

[webService printMyString:@"boom"];

导致实例变量myString被设置为boom并且控制台注销`myString被设置为繁荣“。

于 2013-04-21T00:47:23.017 回答