我正在尝试创建购物车。我想将来自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
以便重复使用?还是有另一种方法来创建相同的逻辑?感谢。
答案 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文件)或变量本身,但请记住,这不是一个很好的做法,因为看起来它会被许多控制器修改,这也是你应该避免使用的另一个原因单身。
希望它有所帮助!