2014-08-29 137 views
-2

对于这个问题,我已经看到了几个例子,但在我的情况下有一个主要的区别。我有一个类LTModel,这是另一个类的容器调用LTChallenge如何从NSArray填充UITableView?

这里是LTModel

#import <Foundation/Foundation.h> 
#import "LTChallenge.h" 

@interface LTModel : NSObject 

@property NSMutableArray *challenges; 
-(int) numberOfChallenges; 
-(void) addChallenge:(NSString *) challengeName; 
-(LTChallenge*) challengeAtIndex:(NSInteger) index; 
@end 

这里是LTChallenge

@interface LTChallenge : NSObject 

@property NSString *name; 
@property NSMutableArray *times; 
- (instancetype)init:(NSString *)challengeName; 
- (void) addObject:(LTTime *) time; 
@end 

现在我UITableViewController我想用挑战的名字填满我的桌子。首先我给他们的价值:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    //Instantiate 
    lapTimerModel = [[LTModel alloc] init]; 
    [lapTimerModel addChallenge:@"Clap 20 times"]; 
    [lapTimerModel addChallenge:@"Say the alphabet"]; 
    [lapTimerModel addChallenge:@"100 Meter Sprint Challenge"]; 
    [lapTimerModel addChallenge:@"Read the IOS al spec challenge"]; 
} 

最后我在这里填入表中,我需要挑战的名字:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    // Return the number of sections. 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 

    // Return the number of rows in the section. 
    return [lapTimerModel numberOfChallenges]; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    if(cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 
    cell.textLabel.text = [lapTimerModel challengeAtIndex]; //???? Maybe in this line I need challenges array in LTModel, I used this but did not work 

// cell.textLabel.text = [lapTimerModel.challenges objectAtIndex:indexPath.row]; 
    return cell; 
} 

如何,我打上问号行使用objectAtIndex:indexPath.row?感谢任何建议。

编辑

这里是实现challengeAtIndex

-(LTChallenge*) challengeAtIndex : (NSInteger) index{ 

    return [_challenges objectAtIndex:index]; 
} 

回答

1

挑战不是一个NSString。并且您需要将NSString分配给cell.textLabel.text:

LTChallenge *challenge = [lapTimerModel challengeAtIndex:indexpath.row]; 
cell.textLabel.text = challenge.name; 
+0

感谢您的回答。我添加了你的代码,但仍然无效。正如我怀疑的那样,我添加了challengeAtIndex的实现。请让我知道如果有什么不对吗? – Bernard 2014-08-29 13:42:11

+0

@Bernard,它似乎没问题。错误可能在别的地方。您是否尝试在-tableView:cellForRowAtIndexPath中设置断点:并检查您是否获得了正确的挑战对象? – 2014-08-29 18:08:40

+0

是的,你是对的问题是一个愚蠢的错误 – Bernard 2014-08-31 02:15:04