在ViewController(A)中,我创建了一个属性,如下所示:
@property (strong, nonatomic) NSMutableArray *someList;
在另一个ViewController(B)中,NSMutableDictionary的一个实例被添加到someList属性中,但它总是给出null。请帮忙。 在B中,
A = [[A alloc] init];
[A.someList addObject:someInitializedMutableDictionary];
答案 0 :(得分:1)
您需要分配- (void)menuButtonPressed
{
[self presentViewController:self.menuAlert animated:YES completion:nil];
self.menuAlert.view.tintColor = COLOR_BACKGROUND_GREEN;
}
属性,该属性通常在子类的someList
方法中完成。但是,存在一个问题,即视图控制器的init
方法通常不在子类中实现,并且在init
中首选这种类型的东西。
因此我建议您创建一种方法来向viewDidLoad
添加内容,如下所示:
someList
,只要需要添加某些内容,就会分配@implementation A
...
- (void)addToSomeList:(id)object
{
if (!_someList)
_someList = [NSMutableArray new];
[_someList addObject:object];
}
。
答案 1 :(得分:0)
someList是否会被初始化?你不能添加一些不存在的东西。
你必须说:
self.someList = [[NSMutableArray alloc] init];
self 当然只有在ViewController A中执行此操作时
答案 2 :(得分:0)
您的方法的基本问题是集合属性不应该是可变的。它有几个问题。所以,首先让我们改变这一点。另外,你必须添加变异方法(mutators)。
@interface MyClass
@property (readonly, nonatomic) NSArray *items; // Better naming
-(void)insertObject:(Item*)item inItemsAtIndex:(NSUInteger)index; // See below
@end
这样做有两个“问题”:
可变的ivar
要获得可变的ivar,只需在实现中声明它:
@implementation MyClass
{
NSMutableArray _items;
}
此ivar将由合成属性使用,因为它具有正确的名称和合法类型(属性的子类)。
你可以在对象生命周期的早期初始化那个ivar,i。即-init
,-viedDidLoad
,$等等。或者你可以在访问器方法中懒散地进行(例如在trojanfoe的答案中)。
此外,如果在.m-File中添加类继续,将属性转换为读/写,则可以在内部设置setter。
如果你有一个setter,你应该明确定义有一个可变副本:
-(void)setItems:(NSArray*)items // Arg type from property
{
_items = [items mutableCopy];
}
<强>更改强>
您应该实施几种KVC方法。您可以找到列表here。 I. e。:
-(void)insertObject:(Item*)item inItemsAtIndex:(NSUInteger)index
{
[_items insertObject:item atIndex:index];
}
通常它只是向集合发送一条适当的消息。