2014-08-29 123 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