在哪里初始化一个对象

时间:2013-05-23 11:04:58

标签: ios objective-c initialization

我的主视图中有一个UITableViewUINavigationBar中有一个'添加'按钮,它会推送到另一个视图,允许用户将另一个对象添加到tableview。我在这个视图中有一个协议,允许将信息发送回主视图。

我的问题是每当我尝试将从协议发送的这个新对象(NSMutableDictionary)添加到主视图中的NSMutableDictionary属性时,它就不会添加。我尝试添加NSLog,并说该对象为null。如果我在viewDidLoad方法中初始化此对象,只要UINavigationController弹出视图,它就会运行,并重置字典中的所有内容。我不知道在哪里初始化对象以确保它保存所有内容。

协议工作正常,但我不能对它发送的对象做任何事情。

在AddCellViewController.h中:

#import <UIKit/UIKit.h>

@protocol AddCellDelegate <NSObject>
@required
-(void)passCellInfo:(NSMutableDictionary *)cellInfo;

@end

@interface AddCellViewController : UITableViewController <UITextFieldDelegate> {
id <AddCellDelegate> delegate;
}
@property (strong) id <AddCellDelegate> delegate;
@end

在AddCellViewController.m(使用该协议的方法)中:

-(void)sendObject{


    [[self delegate] passCellInfo:newCellInfo];

    [self.navigationController popToRootViewControllerAnimated:YES];


}
MainView.m中的

-(void)passCellInfo:(NSMutableDictionary *)cellInfo{

    [self.cellInformation setValue:cellInfo forKey:[cellInfo objectForKey:@"cell_title"]];
    [self.cells addObject:[cellInfo objectForKey:@"cell_title"]];
    [self.tableView reloadData];
    NSLog(@"%@: cellInfo - cellInformation: %@ - cells: %@",cellInfo ,self.cellInformation,self.cells); //logs the object passed from the protocol (this works), the cellInformation object, and cells object (these return null)

}

2 个答案:

答案 0 :(得分:0)

您可以在静态或全局类中使用NSMutableDictionary属性,并可以从tableview或任何其他视图轻松访问它:

  • 您从 词典
  • 中提供表格
  • 您可以将其他视图中的元素添加到那个字典中(不再需要该协议)。

每次出现tableView时,都应该从此全局类刷新表的数据。

如何使用它的一些示例: How to implement global static class

答案 1 :(得分:0)

在您的代码中,您执行此操作。你每次都使用相同的密钥。所以它会被取代。

[self.cells addObject:cellInfo];

我会告诉你一个简单的方法。从init方法将mutableDictionary发送到secondView。在类级别mutableDictionary中复制。不要分配或初始化。在该词典中添加新项目。它将反映在mainView字典中。在mainView viewWillAppear方法中调用[tableView reloadData]。