传递给另一个类时不创建NSMutableDictionary的新实例

时间:2016-07-02 14:09:28

标签: ios objective-c cocoa-touch nsmutabledictionary

我在类中声明了一个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

2 个答案:

答案 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;

如果为声明的属性赋值,则无需显式初始化。