-3

我是新手/正在学习 Objective-C 和 iOS 开发人员 - 这里有一个基本问题,我无法理解。

我有2节课。

在 ClassA 的头文件中,我定义了一个 NSString 对象 ( planetNameImage),因此它可以公开访问。然后在 .m 文件中,我使用以下方法设置它:

self.planetNameImage = planetSelected;

在 ClassB 中,我试图检索这个值,所以我首先实例化 ClassA,使用:

ClassA *claA = [[ClassA alloc] init];

然后尝试使用以下方法调用该变量:

NSString *imageName = claA.planetNameImage;

但是,这不起作用-有什么想法吗?

谢谢。

4

6 回答 6

1

关于什么?

ClassA.h

@interface ClassA:NSObject
   @property (retain, nonatomic) NSString *planetNameImage
@end

ClassB.m
#import "ClassA.h"

@implementation ClassB
- (void)someFunc
  {
      ClassA *instance = [ClassA new];
      instance.planetNameImage = @"name of image";
      NSString *imageName = instance.planetNameImage;
  }
@end
于 2013-07-18T09:39:24.723 回答
0

要将类的实例变量访问到其他类,您需要将其定义为属性。你可以这样做

在类A.h

@property (nonatomic,copy)   NSString * planetNameImage;

在 ClassA.m

@synthesize planetNameImage;

@property将为planetNameImage 创建setter & getter 方法,您可以在classB 中使用它。

于 2013-07-18T09:24:16.190 回答
0

基本上有两种方法可以解决这个问题。

方法一声明 iVar 并暴露访问器方法

// .h file
@interface ClassA : NSObject {
    NSString    *planetNameImage;
}

- (NSString*) getPlanetNameImage;

@end

// .m file
@implementation ClassA

- (NSString*) getPlanetNameImage {
    return planetNameImage;
}

@end

方法一声明属性并合成

// .h file
@interface ClassA : NSObject

@property(nonatomic,strong)NSString    *planetNameImage;

@end

// .m file
@implementation ClassA

@synthesize planetNameImage;

@end

如何在 ClassB 中使用

#import "ClassA.h" 

- (void) someClassBMethod {
     ClassA *claA = [[ClassA alloc] init];
     NSLog(@"String: %@", [claA getPlanetNameImage]);
     //OR
     NSLog(@"String: %@", claA.planetNameImage);
}

希望有帮助。

于 2013-07-18T09:36:34.473 回答
0

尝试这个:

类A.h

@property (nonatomic, retain) NSString *planetNameImage;

类A.m

@synthesize planetNameImage = _planetNameImage;

_planetNameImage = planetSelected;

B类.m

NSString *imageName = classA.planetNameImage;
于 2013-07-18T09:46:59.480 回答
0

最好的方法是将NSString名称 传递planetNameImage给您的ClassB

切换到 B 类时编写代码。

ClassB *obj = [[ClassB alloc] init];
obj.newString = planetNameImage; 
[obj presentModelViewController:obj animated:YES];

不要忘记在 ClassB.h 文件中放置NSString *newString和设置。@property

于 2013-07-18T09:26:34.097 回答
0

您需要将其planetNameImage作为其属性

@property (nonatomic) NSString *planetNameImage ;

并在 .m 文件中

synthesize planetNameImage ;

另外,我认为您需要在init方法中添加以下语句ClassA

self.planetNameImage = planetSelected;
于 2013-07-18T09:35:38.750 回答