我是新手/学习Objective-C和iOS开发 - 这里有一个基本问题我无法理解。
我有两节课。
在ClassA中,在头文件中我定义了一个NSString对象(planetNameImage
),因此可以公开访问它。然后在.m文件中我使用:
self.planetNameImage = planetSelected;
在ClassB中,我正在尝试检索此值,因此我首先使用以下方法实现ClassA:
ClassA *claA = [[ClassA alloc] init];
然后尝试使用:
调用该变量NSString *imageName = claA.planetNameImage;
然而,这不起作用 - 任何想法?
感谢。
答案 0 :(得分: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
答案 1 :(得分:0)
要将类的实例变量访问到其他类,您需要将其定义为属性。 你可以这样做
在classA.h中
@property (nonatomic,copy) NSString * planetNameImage;
ClassA.m中的
@synthesize planetNameImage;
@property
将创建setter& planetNameImage的getter方法,您可以在classB中使用它。
答案 2 :(得分:0)
最佳方式是将NSString
名称planetNameImage
传递给您的 ClassB 。
切换到B类时写代码。
ClassB *obj = [[ClassB alloc] init];
obj.newString = planetNameImage;
[obj presentModelViewController:obj animated:YES];
别忘了放置NSString *newString
并设置@property
,也就是ClassB.h文件。
答案 3 :(得分:0)
您需要将planetNameImage
作为其属性
@property (nonatomic) NSString *planetNameImage ;
和.m文件
synthesize planetNameImage ;
此外,我认为您需要在init
ClassA
方法中添加以下语句
self.planetNameImage = planetSelected;
答案 4 :(得分:0)
基本上有两种方法可以解决这个问题。
方法I :声明iVar并公开访问者方法
// .h file
@interface ClassA : NSObject {
NSString *planetNameImage;
}
- (NSString*) getPlanetNameImage;
@end
// .m file
@implementation ClassA
- (NSString*) getPlanetNameImage {
return planetNameImage;
}
@end
方法I :声明属性并合成
// .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);
}
希望有所帮助。
答案 5 :(得分:0)
试试这个:
ClassA.h
@property (nonatomic, retain) NSString *planetNameImage;
ClassA.m
@synthesize planetNameImage = _planetNameImage;
_planetNameImage = planetSelected;
ClassB.m
NSString *imageName = classA.planetNameImage;