如何将数据保存到NSMutableDictionary并从NSMutableDictionary加载数据

时间:2016-05-03 12:07:57

标签: ios objective-c nsmutabledictionary

我正在尝试创建购物车。我想将来自NSMutableDictionary的所有数据NSDictionary放入条形码编号,其中 DataItem 变量为key。我用该代码块创建了NSMutableDictionary;

- (void)viewDidLoad {

    [super viewDidLoad];

    DataItem = [[[_response objectForKey:@"Data"] objectForKey:@"Items"] objectForKey:@"Item"];

    NSMutableDictionary *CartItems = [[NSMutableDictionary alloc]init];

    for(NSDictionary *transaction in DataItem)

    {
       [CartItems setValue:transaction  forKey:[transaction objectForKey:@"BarcodeNumber"]];
    }
}

当我按下另一个viewController选择另一个项目来放置购物车时。再次推送viewController,它会从 CartItems 变量中的项目之前删除。

我知道我已将该代码块NSMutableDictionary *CartItems = [[NSMutableDictionary alloc]init];置于 viewDidLoad 中。这就是为什么,它会生成新的 CartItems 变量。如果我想将其设为 .h 文件,则会返回 nil 。我没有找到任何解决方案。

有没有办法将数据加载到NSMutableDictionary以便重复使用?还是有另一种方法来创建相同的逻辑?感谢。

4 个答案:

答案 0 :(得分:0)

为第一次初始化返回相同对象的数据创建一个单例类,并使用它来存储数据。

+ (id)getBE {
    static MyBEClass *objMyBEClass = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        objMyBEClass = [[self alloc] init];
    });
    return objMyBEClass;
}

使CarItems字典成为BE类的属性,这样您就可以从视图控制器中获取它。

@property(strong)NSMutableDictionary *CartItems;

在BE类的init方法中初始化数组/字典。

CartItems = [[NSMutableDictionary alloc]init];

答案 1 :(得分:0)

使用单例类来存储this教程

等数据

答案 2 :(得分:0)

您可以使用public class listpopupadapter extends BaseAdapter { ArrayList<String> a; String type; public listpopupadapter(ArrayList<String> a, String type) { this.a = a; this.type = type; } @Override public int getCount() { return a.size(); } @Override public Object getItem(int position) { return getItem(position); } @Override public long getItemId(int position) { return position; } @SuppressLint("ViewHolder") @Override public View getView(final int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View root = LayoutInflater.from(parent.getContext()).inflate( R.layout.raw_filter, null); } } 进行管理。这是viewDidLoad -

NSUserDefaults

每当您想清除购物车时,时间也会 - (void)viewDidLoad { DataItem = [[[_response objectForKey:@"Data"] objectForKey:@"Items"] objectForKey:@"Item"]; NSUserDefaults *prefrence=[[NSUserDefaults alloc]init]; if ([[NSUserDefaults standardUserDefaults]objectForKey:@"cartItems"]!=nil) { NSMutableDictionary *CartItems=[[NSUserDefaults standardUserDefaults]objectForKey:@"cartItems"]; for(NSDictionary *transaction in DataItem) { [CartItems setValue:transaction forKey:[transaction objectForKey:@"BarcodeNumber"]]; } [prefrence setObject:CartItems forKey:@"cartItems"]; }else{ NSMutableDictionary *CartItems = [[NSMutableDictionary alloc]init]; for(NSDictionary *transaction in DataItem) { [CartItems setValue:transaction forKey:[transaction objectForKey:@"BarcodeNumber"]]; } [prefrence setObject:CartItems forKey:@"cartItems"]; } } 使用NSUserDefaults清除。

答案 3 :(得分:0)

我建议不要使用Singleton来做这样的事情,除非你构建一个包含许多控制器的巨大应用程序,并且你需要你的图表无处不在。

如果不是这种情况,我建议你将char作为参数从一个控制器传递给另一个控制器,并将其传递给代理,如guide所示。

如果你有一个使用单个导航控制器构建的应用程序,请记住它没有被解除分配,因此你可以在那里保存数据。只是让变量的getter和setter可见(.h文件)或变量本身,但请记住,这不是一个很好的做法,因为看起来它会被许多控制器修改,这也是你应该避免使用的另一个原因单身。

希望它有所帮助!