Ios 无法使用sharedStore传递包含内容的数组?

Ios 无法使用sharedStore传递包含内容的数组?,ios,uitableview,static,nsarray,class-method,Ios,Uitableview,Static,Nsarray,Class Method,简短背景:我正在创建一个应用程序,用户可以在其中看到每个餐厅的菜单。我创建了一个名为“Dish”的类,其中设置了菜单项的名称、成分和价格。然后,我为每个餐厅创建了一个类,该类为每个餐厅创建和存储项目。我希望在显示菜单的UITableView中将菜单的各个部分(例如“主菜”、甜点)划分到桌子部分 理想情况下,我会为每个餐厅菜单创建一个包含部分的数组,其中许多数组(每个菜单部分一个)包含该部分中的菜肴。我尝试过这个方法,但无法使其工作。似乎我无法传递包含数组的数组,因为它只返回零。真的是这样吗

简短背景:我正在创建一个应用程序,用户可以在其中看到每个餐厅的菜单。我创建了一个名为“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