2011-06-29 7 views
2

私のモデルで私は次のコードを持っています...私は正常に個々の値を返すことができます。私はスピーカーテーブル全体をどのように返すことができるのか知りたいです。ありがとう!静的const []を返します

これが正しく動作
typedef struct { 
    NSUInteger speakerID; 
    NSString * speakerName; 
    NSString * speakerPosition; 
    NSString * speakerCompany; 
} SpeakerEntry; 

static const SpeakerEntry speakerTable [] = 
{ 
    {0, @"name", @"position", @"company"}, 
    {1, @"name", @"position", @"company"}, 
    {-1, nil, nil, nil} 
}; 

...

-(NSString *) stringSpeakerCompanyForId:(NSUInteger) identifier{ 
NSString * returnString = nil; 
if ([self helpCount] > identifier) { 
    returnString = speakerTable[identifier].speakerCompany; 
} 
return returnString; 

}

これがすべてでは動作しません。..

-(id) getSpeaker{ 
//if ([speakerTable[0].speakerName isKindOfClass:[NSString class]]) 
// NSLog(@"YES"); 
NSArray * myArray3 = [NSArray arrayWithArray:speakerTable]; 
return myArray3; 

}

+1

@Jennisありがとう、ごめんなさい、それについて知りませんでした。それの世話をした。 – Greg

答えて

6

arrayWithArrayは、NSArrayのを期待しますC配列ではありません。

最初のものは、C配列のように使用しているため動作します。

代わりに - 、構造体を使用しない代わりに、オブジェクトを使用します。

はスピーカーと呼ばれるクラスを作成します。

Speaker.hで

@interface Speaker : NSObject {} 

@property (nonatomic, assign) NSUinteger id; 
@property (nonatomic, copy) NSString name; 
@property (nonatomic, copy) NSString position; 
@property (nonatomic, copy) NSString company; 

- (void)initWithId:(NSUInteger)anId name:(NSString *)aName position:(NSString *)aPosition company:(NSString *)aCompany; 

@end 

Speaker.m

#import "Speaker.h" 

@implementation Speaker 

@synthesize id, name, position, company; 

- (void)initWithId:(NSUInteger)anId name:(NSString *)aName position:(NSString *)aPosition company:(NSString *)aCompany { 
    if (!([super init])) { 
     return nil; 
    } 
    id = anId; 
    NSString name = [[NSString alloc] initWithString:aName]; 
    NSString position = [[NSString alloc] initWithString:aPosition]; 
    NSString company = [[NSString alloc] initWithString:aCompany]; 

    return self; 
} 

- (void)dealloc { 
    [name release]; 
    [position release]; 
    [company release]; 
    [super dealloc]; 
} 

@end 

そして今、あなたの呼び出し元のコードにあなたがスピーカーの不変の配列を作成することができます。

Speaker *speaker0 = [[Speaker alloc] initWithId:0 name:@"name0" position:@"position0" company:@"company0"]; 
Speaker *speaker1 = [[Speaker alloc] initWithId:1 name:@"name1" position:@"position1" company:@"company1"]; 
Speaker *speakerNull = [[Speaker alloc] initWithId:-1 name:nil position:nil company:nil]; 

NSArray *speakerArray [[NSArray arrayWithObjects: speaker0, speaker1, speakerNull] retain] 

[speaker0 release]; 
[speaker1 release]; 
[speakerNull release]; 

注:これはストレートで入力されたので、/正しいタイプミスやエラー

+0

NSArray * myArray; myArray = [NSArray arrayWithObjects: – Greg

+0

ありがとう、私はそれを試してみましょう – Greg

+0

ポイントは、構造体が使用されていますが、オブジェクトが優先されます。オーバーヘッドがありますが、実際のプログラムでは、オーバーヘッドよりも利点があります。オブジェクトを格納してplistなどに出力する方が簡単です。それについてあまり言いたくはありませんが、構造体はiOS5またはLionでARCを使用している場合はコンパイルしてください。最初に適切に行う方法を学ぶ方がよいでしょう。 – Abizern

2

引数ではなく、Cの配列としてNSArrayに取るarrayWithArray方法に言及すること自由に感じています。

関連する問題