传递给另一个 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;
如果已将值分配给已声明的 属性,则无需显式初始化。
我在 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;
如果已将值分配给已声明的 属性,则无需显式初始化。