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

Not creating a new instance of NSMutableDictionary when passing to another class

我在 class 中声明了一个 NSMutableDictionary,但我想在另一个 class 中打印获取它的内容,例如

@interface MyClass0 : NSObject
{

}

@property (nonatomic, strong) NSMutableDictionary *valuee;
@end

在实施中我会

@implementation MyClass0

- (void)viewDidLoad{
  [super viewDidLoad];

[valuee setObject:@"name" forKey:@"Aryan"];

}

@end

现在我创建了一个名为 MyClass1 的新 class,我想在其中访问这些

  @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

如果它只是一个简单的 NSMutableDictionary,每次都具有相同的内容,您可以在 MyClass0 中创建一个 class 方法,如下所示:

+ (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;
    }
}

您正在创建 MyClass0 的实例并且 valuee 已声明但未初始化。

最接近您的代码的解决方案是

MyClass0 *c = [[MyClass0 alloc] init];
c.valuee = [[NSMutableDictionary alloc] init];

self.dict = c.valuee;

如果已将值分配给已声明的 属性,则无需显式初始化。