2012-12-11 36 views
1

我已经在头文件中声明了一个属性NSMutableArray。然后我分配,在viewDidLoad方法中初始化它。但是当我尝试在一个不同的方法中向数组添加一个对象时,它会一直返回(null)。我在做一些明显的错误吗?请询问你是否想看更多的代码。NSMutableArray不断返回空

.H

@property (strong, nonatomic) NSMutableArray *myList; 

的.m

- (void)viewDidLoad 
{ 
    self.dataController = [[DataController alloc]init]; 

    self.myList = [[NSMutableArray alloc] init]; 

    [super viewDidLoad]; 
} 

[...]

NSDictionary *myObject = [self.dataController.objectList objectAtIndex:r]; 
[[cell textLabel]setText:[myObject objectForKey:@"title"]]; 

[self.myList addObject:myObject]; 

NSLog(@"myList %@",self.myList); 
NSLog(@"myObject %@",myObject); 

myObject的但self.myList保持返回(空)的输出打印。感谢所有帮助!

编辑:修正了,谢谢你的回答!

+3

您确定视图在您尝试访问列表时已加载吗?也许你应该在'init'中初始化这些属性。 –

+0

应用程序中的哪个位置是您创建myObject的代码,将它添加到myList并执行日志? – rdelmar

+0

@KevinBallard第三个代码片段中的代码在tableView:cellForRowAtIndexPath中,所以我猜问题是这个方法在viewDidLoad之前加载。但是,在登录tableView:cellForRowAtIndexPath之前,viewDidLoad中的日志会返回。我试图将代码从viewDidLoad移动到(id)初始化,但从来没有得到它的工作。 – Emil

回答

1

不确定你在哪里使用这个数组。如果你要使用这个数组viewDidLoad被调用之前,你可以由于您使用[cell textLabel]我假设你在表视图代表一个这样做的,

NSDictionary *myObject = [self.dataController.objectList objectAtIndex:r]; 
[[cell textLabel]setText:[myObject objectForKey:@"title"]]; 

if (!self.myList) 
    self.myList = [[NSMutableArray alloc] init];//for the first time, this will initialize 

[self.myList addObject:myObject]; 

。在这种情况下,检查你是否在课堂上设置self.myList = nil;

+0

它比viewDidLoad更晚使用 - 否则他的代码不会打印myObject。或者会吗? –

+1

@ Daij-Djan,不能从'myObject'预测。可能是因为他正在从前一个类本身设置'dataController',并且在执行此操作时不调用'dataController'的初始化部分。但我认为你是正确的,因为'cell textLabel'应该在'cellForRowAtIndexpath'中完成。这应该在'viewDidLoad'后面调用。但无论如何他必须在他的问题中增加更多信息。 – iDev

+0

我的想法是,他简单地初始化了'init'中的'myObject',但没有意识到/没有提及它。 – borrrden

0

在您发布的代码中,我看不到任何错误。 设置一个断点并查看是否首先调用初始化数组的代码。

0

我敢打赌,当NSLogs执行时,viewDidLoad还没有被调用。

为确保数组已初始化,请尝试将初始化放入init方法中。

+0

我还没有任何init方法。当我尝试添加一个它不会执行。 – Emil