2011-06-29 73 views
2

所以在我的模型中我有以下代码...我成功地能够返回每个单独的值。我想知道我怎么能够返回整个speakerTable [] ...也许一些建议。谢谢!返回一个静态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类。

在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

关键是,尽管使用了结构体,但对象是首选。有开销,但在实际的程序中,好处大于开销 - 它更容易存储对象,输出到plists等等。而且,尽管我不想多说这些,你的结构将不会如果您在iOS5或Lion上使用ARC,请进行编译,因此您最好先学习如何正确执行此操作。 – Abizern

2

NSArrayarrayWithArray带一个参数,而不是C数组的方法。

相关问题