0

我的UITableView主视图中有一个“添加”按钮,该按钮UINavigationBar将推送到另一个视图,允许用户将另一个对象添加到 tableview。我在这个视图中有一个协议,允许将信息发送回主视图。

我的问题是,每当我尝试将从协议(即 a 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)

}
4

2 回答 2

0

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

[self.cells addObject:cellInfo];

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

于 2013-05-23T11:20:49.607 回答
0

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

  • 你从那本字典里喂你的桌子
  • 然后您将其他视图中的元素添加到字典中(不再需要该协议)。

每次你的 tableView 出现时,你应该从这个全局类中刷新表的数据。

如何使用它的一些示例: 如何实现全局静态类

于 2013-05-23T11:19:27.520 回答