0

簡単な背景: ユーザーが各レストランのメニューを表示できるアプリを作成しています。メニュー項目の名前、材料、価格を設定する「Dish」というクラスを作成しました。次に、各レストランのアイテムを作成して保存する各レストランのクラスを作成しました。メニューを表示する UITableView で、メニューの一部 (「メインディッシュ」、「デザート」など) をテーブルセクションに分割します。

理想的には、各レストラン メニューのパーツを含む配列を作成します。この配列には、そのパーツの料理を含む多数の配列 (メニュー パーツごとに 1 つ) があります。私はこれを試しましたが、動作させることができません。nilしか返さないので、配列を含む配列を渡すことはできないようです。これは本当にそうですか?



以下は、Badholmen というレストランのメニューを含む私のクラスのコードです。このレストランには現在 2 つの料理しか含まれていません。しかし、私が持っている他のメニューには最大 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 メソッドで) を呼び出します。

    [[BadholmenStore sharedStore] emptyArray];
    [[BadholmenStore sharedStore] createBadholmen];
4

1 に答える 1

1

このようにしてください、これがあなたに役立つことを願っています:)


   // 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 


于 2013-09-03T10:26:01.423 に答える