Ios 无法使用sharedStore传递包含内容的数组?
简短背景:我正在创建一个应用程序,用户可以在其中看到每个餐厅的菜单。我创建了一个名为“Dish”的类,其中设置了菜单项的名称、成分和价格。然后,我为每个餐厅创建了一个类,该类为每个餐厅创建和存储项目。我希望在显示菜单的UITableView中将菜单的各个部分(例如“主菜”、甜点)划分到桌子部分 理想情况下,我会为每个餐厅菜单创建一个包含部分的数组,其中许多数组(每个菜单部分一个)包含该部分中的菜肴。我尝试过这个方法,但无法使其工作。似乎我无法传递包含数组的数组,因为它只返回零。真的是这样吗Ios 无法使用sharedStore传递包含内容的数组?,ios,uitableview,static,nsarray,class-method,Ios,Uitableview,Static,Nsarray,Class Method,简短背景:我正在创建一个应用程序,用户可以在其中看到每个餐厅的菜单。我创建了一个名为“Dish”的类,其中设置了菜单项的名称、成分和价格。然后,我为每个餐厅创建了一个类,该类为每个餐厅创建和存储项目。我希望在显示菜单的UITableView中将菜单的各个部分(例如“主菜”、甜点)划分到桌子部分 理想情况下,我会为每个餐厅菜单创建一个包含部分的数组,其中许多数组(每个菜单部分一个)包含该部分中的菜肴。我尝试过这个方法,但无法使其工作。似乎我无法传递包含数组的数组,因为它只返回零。真的是这样吗
下面是我的类的代码,其中包含名为Badholmen的餐厅菜单,该餐厅现在只包含两道菜。但我的其他菜单包含多达70道菜,在那里我需要能够将每道菜放入一个数组中,
[allBadholmen addObject:ArrayOfMenuParts
:
#import "BadholmenStore.h"
#import "Dish.h"
@implementation BadholmenStore
+ (BadholmenStore *)sharedStore
{
static BadholmenStore *sharedStore = nil;
if (!sharedStore)
sharedStore = [[super allocWithZone:nil] init];
return sharedStore;
}
#pragma mark - tillägg av platser
- (void)createBadholmen
{
Dish *bhvar = [[Dish alloc] initWithName:@"Varierande meny"
ingredients:@" "
price:@" "];
[allBadholmen addObject:bhvar];
Dish *bhsom = [[Dish alloc] initWithName:@"Sommarlunch med varierande meny (endast sommartid)"
ingredients:@"inkl. måltidsdryck"
price:@"79:-"];
[allBadholmen addObject:bhsom];
}
- (void)emptyArray
{
[allBadholmen removeAllObjects];
}
- (NSArray *)allBadholmen
{
return allBadholmen;
}
#pragma mark - Overriden methods
+ (id)allocWithZone:(NSZone *)zone
{
return [self sharedStore];
}
- (id)init
{
self = [super init];
if (self) {
allBadholmen = [[NSMutableArray alloc] init];
}
return self;
}
@end
为了让表视图知道菜单中的菜肴,我调用(在表视图的init方法中):
这样做,希望这对你有帮助:)
// in BadholmenStore.h
#import <Foundation/Foundation.h>
@interface BadholmenStore : NSObject
{
NSMutableArray *allBadholmen; //for your shared object contains one "mutable array", define it hear
}
+ (BadholmenStore *)sharedStore; //your class method
//instance methods
- (void)createBadholmen;
- (void)emptyArray;
- (NSMutableArray *)allBadholmen;
@end
// in BadholmenStore.m
#import "BadholmenStore.h"
#import "Dish.h"
@implementation BadholmenStore
static BadholmenStore *sharedStore = nil; //it shoud be visible to all, put this line hear
+ (BadholmenStore *)sharedStore
{
if (!sharedStore)
sharedStore = [[super allocWithZone:nil] init];
return sharedStore;
}
#pragma mark - tillägg av platser
- (void)createBadholmen
{
Dish *bhvar = [[Dish alloc] initWithName:@"Varierande meny"
ingredients:@" "
price:@" "];
[allBadholmen addObject:bhvar];
Dish *bhsom = [[Dish alloc] initWithName:@"Sommarlunch med varierande meny (endast sommartid)" ingredients:@"inkl. måltidsdryck" price:@"79:-"];
[allBadholmen addObject:bhsom];
}
- (void)emptyArray
{
[allBadholmen removeAllObjects];
}
- (NSMutableArray *)allBadholmen // replace your NSArray with NSMutableArray
{
return allBadholmen;
}
#pragma mark - Overriden methods
+ (id)allocWithZone:(NSZone *)zone
{
return [self sharedStore];
}
- (id)init
{
self = [super init];
if (self) {
allBadholmen = [[NSMutableArray alloc] init];
}
return self;
}
@end
//in the class where u are using this shared class object
[super viewDidLoad];
[[BadholmenStore sharedStore] emptyArray];
[[BadholmenStore sharedStore] createBadholmen];
NSMutableArray *allObjects = [[BadholmenStore sharedStore] allBadholmen]; // now use allObjects
//在BadholmenStore.h中
#进口
@接口BadholmenStore:NSObject
{
NSMutableArray*allBadholmen;//对于共享对象包含一个“可变数组”,请定义它
}
+(BadholmenStore*)sharedStore;//您的类方法
//实例方法
-(无效)创建Badholmen;
-(无效)空射线;
-(NSMutableArray*)allBadholmen;
@结束
//在BadholmenStore
#导入“BadholmenStore.h”
#进口“Dish.h”
@BadholmenStore的实现
静态BadholmenStore*sharedStore=nil;//它应该对所有人都可见,把这行放在hear上
+(BadholmenStore*)共享存储
{
如果(!sharedStore)
sharedStore=[[super allocWithZone:nil]init];
返回共享存储;
}
#布拉格马克-蒂尔ägg av platser
-(无效)createBadholmen
{
Dish*bhvar=[[Dish alloc]initWithName:@“Varierande meny”
成分:@“
价格:@“];
[allBadholmen addObject:bhvar];
菜肴*bhsom=[[Dish alloc]初始名称:@“Sommarlunch med varierande meny(endast sommartid)”成分:@“inkl.måltidsddryck”价格:@“79:-”;
[allBadholmen addObject:bhsom];
}
-(空)空数组
{
[所有Badholmen移除所有对象];
}
-(NSMutableArray*)allBadholmen//将NSArray替换为NSMutableArray
{
返回奥尔巴德霍尔曼;
}
#pragma标记-重写的方法
+(id)allocWithZone:(NSZone*)区域
{
返回[自共享存储];
}
-(id)init
{
self=[super init];
如果(自我){
allBadholmen=[[NSMutableArray alloc]init];
}
回归自我;
}
@结束
//在您使用此共享类对象的类中
[超级视图下载];
[[BadholmenStore sharedStore]emptyArray];
[[BadholmenStore sharedStore]创建Badholmen];
NSMutableArray*AllObject=[[BadholmenStore sharedStore]allBadholmen];//现在使用AllObject
我不太清楚你的问题是什么。你可以把数组放在数组中。太棒了,工作起来很有魅力。那么这背后的理论是什么?为什么我必须使用可变数组?我没有设置任何新对象…因为你在使用“[allBadholmen addObject:bhvar];”因为,NSArray没有这个“addObject:方法,它给出的错误是wy,我使用了NSMUTABLEARRY,但如果您想使用NSArray,则意味着您不应添加任何对象。初始化时它只包含多个对象。因为您的共享对象包含一个数组“allBadholmen”,我将其作为您的共享对象实例的一个成员创建,每当您创建此分解对象时,我都会初始化它一次,并且我将在任何需要的地方使用此数组。->这就是共享对象仪式。。。。
// in BadholmenStore.h
#import <Foundation/Foundation.h>
@interface BadholmenStore : NSObject
{
NSMutableArray *allBadholmen; //for your shared object contains one "mutable array", define it hear
}
+ (BadholmenStore *)sharedStore; //your class method
//instance methods
- (void)createBadholmen;
- (void)emptyArray;
- (NSMutableArray *)allBadholmen;
@end
// in BadholmenStore.m
#import "BadholmenStore.h"
#import "Dish.h"
@implementation BadholmenStore
static BadholmenStore *sharedStore = nil; //it shoud be visible to all, put this line hear
+ (BadholmenStore *)sharedStore
{
if (!sharedStore)
sharedStore = [[super allocWithZone:nil] init];
return sharedStore;
}
#pragma mark - tillägg av platser
- (void)createBadholmen
{
Dish *bhvar = [[Dish alloc] initWithName:@"Varierande meny"
ingredients:@" "
price:@" "];
[allBadholmen addObject:bhvar];
Dish *bhsom = [[Dish alloc] initWithName:@"Sommarlunch med varierande meny (endast sommartid)" ingredients:@"inkl. måltidsdryck" price:@"79:-"];
[allBadholmen addObject:bhsom];
}
- (void)emptyArray
{
[allBadholmen removeAllObjects];
}
- (NSMutableArray *)allBadholmen // replace your NSArray with NSMutableArray
{
return allBadholmen;
}
#pragma mark - Overriden methods
+ (id)allocWithZone:(NSZone *)zone
{
return [self sharedStore];
}
- (id)init
{
self = [super init];
if (self) {
allBadholmen = [[NSMutableArray alloc] init];
}
return self;
}
@end
//in the class where u are using this shared class object
[super viewDidLoad];
[[BadholmenStore sharedStore] emptyArray];
[[BadholmenStore sharedStore] createBadholmen];
NSMutableArray *allObjects = [[BadholmenStore sharedStore] allBadholmen]; // now use allObjects