我在类中声明了一个NSMutableDictionary,但是我想在另一个类中打印访问它的内容,例如
@interface MyClass0 : NSObject
{
}
@property (nonatomic, strong) NSMutableDictionary *valuee;
@end
在实施中我做了
@implementation MyClass0
- (void)viewDidLoad{
[super viewDidLoad];
[valuee setObject:@"name" forKey:@"Aryan"];
}
@end
现在我创建一个名为MyClass1的新类,我想访问这些
@interface MyClass1 : NSObject
{
}
@property (nonatomic, strong) NSMutableDictionary *dict;
@end
和实施
@implementation MyClass1
@synthesize dict;
- (void)viewDidLoad{
[super viewDidLoad];
self.dict = [[NSMutableDictionary alloc] init];
MyClass0 *c = [[MyClass0 alloc] init];
self.dict = c.valuee;
// dict is not nil but the contents inside is nil so it clearly creates a new instance
}
@end
答案 0 :(得分:1)
如果它只是一个简单的NSMutableDictionary,每次你可以在MyClass0中创建一个类方法,就像这样:
+ (NSMutableDictionary *) getDict {
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"name" forKey:@"Aryan"];//did you mean [dict setObject:@"Aryan" forKey:@"name"]?
return dict;
}
要访问它,请在MyClass0.h文件中声明方法,如下所示:+ (NSMutableDictionary *) getDict;
,只需在MyClass1.m文件中调用[MyClass0 getDict];
即可。
如果每次都没有相同的内容,您必须将字典向前传递给prepareForSegue中的每个视图控制器:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Make sure your segue name in storyboard is the same as this next line
if ([[segue identifier] isEqualToString:@"MySegue"]) {
MyClass1 *mc = [segue destinationViewController];
mc.dict = self.valuee;
}
}
答案 1 :(得分:1)
您正在创建MyClass0
的实例,并声明valuee
但未初始化。
最接近您代码的解决方案是
MyClass0 *c = [[MyClass0 alloc] init];
c.valuee = [[NSMutableDictionary alloc] init];
self.dict = c.valuee;
如果为声明的属性赋值,则无需显式初始化。