2015-07-24 4 views
0

В настоящее время я работаю над простым приложением для отслеживания тренировок, где у меня есть представление таблицы и каждый план плана тренировки загружается в каждую ячейку.UITableViewCell Subtitle не обновляется корректно из массива

Я использую субтитры для стиля ячейки таблицы, которые я выбрал в раскадровке.

Я помещал каждое название упражнений на текстовую метку и количество повторений и наборов на подробную метку.

моя проблема в том, что данные для упражнений правильно загружаются в текстовую метку каждой строки в отношении массива тренировки, но информация о повторах & не загружена правильно.

Week1_3ViewController.m

#import "Week1_3ViewController.h" 
#import "SWRevealViewController.h" 

@interface Week1_3ViewController() 

@property (nonatomic) NSMutableArray *workouts; 
@property (nonatomic) NSArray *reps; 
@property (nonatomic) NSArray *days; 

@end 

@implementation Week1_3ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.navigationController.navigationBar.hidden = YES; 

    self.workouts = @[@{@"name" : @"SQUATS", @"days" : @"DAY 1"}, @{@"name" : @"BENT OVER ROWS", @"days" : @"DAY 1"}, @{@"name" : @"BENCH PRESS", @"days" : @"DAY 1"}, @{@"name" : @"OVERHEAD PRESS", @"days" : @"DAY 1"}, @{@"name" : @"EXTERNAL ROTATIONS", @"days" : @"DAY 1"}, @{@"name" : @"SEATED CALF RAISES", @"days" : @"DAY 1"}, @{@"name" : @"MOUNTAIN CLIMBERS", @"days" : @"DAY 1"}, @{@"name" : @"PLANKS", @"days" : @"DAY 1"}, @{@"name" : @"DEADLIFT", @"days" : @"DAY 2"}, @{@"name" : @"KNEELING LANDMINE PRESS", @"days" : @"DAY 2"}, @{@"name" : @"ALT. ARNOLD PRESS", @"days" : @"DAY 2"}, @{@"name" : @"ALT. FRONT LUNGE", @"days" : @"DAY 2"}, @{@"name" : @"PULL OVER", @"days" : @"DAY 2"}, @{@"name" : @"WEIGHTED CRUNCHES", @"days" : @"DAY 2"}, @{@"name" : @"SIDE PLANKS", @"days" : @"DAY 2"}, @{@"name" : @"FRONT SQUAT", @"days" : @"DAY 3"}, @{@"name" : @"T-BAR ROW", @"days" : @"DAY 3"}, @{@"name" : @"DIPS", @"days" : @"DAY 3"}, @{@"name" : @"UPRIGHT ROW", @"days" : @"DAY 3"}, @{@"name" : @"GLUTE BRIDGES (WEIGHTED)", @"days" : @"DAY 3"}, @{@"name" : @"STANDING CALF RAISES", @"days" : @"DAY 3"}, @{@"name" : @"RUSSIAN TWIST", @"days" : @"DAY 3"}].mutableCopy; 

    self.reps = @[@"15, 12, 10, 8, 6", @"12, 10, 8, 6, 6", @"15, 12, 10, 8, 6", @"12, 10, 8, 6, 6", @"3 x 12", @"3 x 15", @"3 x 30 SECONDS", @"3 x 30 SECONDS", @"15, 12, 10, 8, 6", @"15, 12, 10, 8, 8", @"12, 10, 8, 8, 6", @"5 x 10", @"3 x 15", @"3 x 15", @"3 x 30 SECONDS", @"15, 12, 10, 8, 6", @"12, 10, 8, 8, 6", @"5 x 15", @"15, 12, 10, 8, 8", @"3 x 10", @"3 x 15", @"3 x 30 (15 EACH SIDE)"]; 
    self.days = @[@"DAY 1", @"DAY 2", @"DAY 3"]; 


    self.title = @"WEEK 1-3, PHASE 1"; 

    SWRevealViewController *revealViewController = self.revealViewController; 
    if (revealViewController) 
    { 
     [self.sidebarButton setTarget: self.revealViewController]; 
     [self.sidebarButton setAction: @selector(revealToggle:)]; 
     [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer]; 
    } 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

#pragma mark - DataSource helper methods 

- (NSArray *) itemsInDays:(NSString *)targetDays { 
    NSPredicate *matchingPredicate = [NSPredicate predicateWithFormat:@"days == %@", targetDays]; 
    NSArray *daysItems = [self.workouts filteredArrayUsingPredicate:matchingPredicate]; 

    return daysItems; 
} 

- (NSInteger)numberOfItemsInDays:(NSString *)targetDays { 
    return [self itemsInDays:targetDays].count; 
} 

- (NSDictionary *)itemAtIndexPath:(NSIndexPath *)indexPath { 
    NSString *days = self.days[indexPath.section]; 
    NSArray *daysItems = [self itemsInDays:days]; 
    NSDictionary *item = daysItems[indexPath.row]; 

    return item; 
} 

- (NSInteger)itemIndexForIndexPath:(NSIndexPath *)indexPath { 
    NSDictionary *item = [self itemAtIndexPath:indexPath]; 

    NSInteger index = [self.workouts indexOfObjectIdenticalTo:item]; 

    return index; 
} 

#pragma mark - table view datasource 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ 
    return self.days.count; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    return [self numberOfItemsInDays:self.days[section]]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    static NSString *CellIdentifier = @"workoutrow"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    NSDictionary *workouts = [self itemAtIndexPath:indexPath]; 

    cell.textLabel.text = workouts[@"name"]; 
    cell.detailTextLabel.text = [_reps objectAtIndex:indexPath.row]; 
    // NSLog(@"cell.textLabel.text %@", cell.textLabel.text); 


    [cell layoutIfNeeded]; 
    return cell; 

} 
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
    return self.days[section]; 
} 





@end 

и вот мое приложение Тренажер работает результат. [! [Результат Тренажер] [1]] [1]

http://i.stack.imgur.com/VQWzO.png

вы можете увидеть, что метка подзаголовок "15, 12, 10, 8, 6" из "DEAD LIFT" повторяется для некоторых Причина, которую я не могу найти.

в соответствии с массивом «повторений», который я установил, это не должно быть так.

btw, это табличное представление отделяется от другой ячейки таблицы, которая является ячейкой tableview в боковой панели в моем коде.

жаль не мог загрузить изображение из-за репутации

спасибо заранее

+0

Я вижу много «15, 12, 10, 8, 6» в вашем массиве reps, вы проверили данные? –

+0

@jinhualiao данные верны. если вы посмотрите на массив и захваченное изображение, отображаемая метка отличается от –

+0

, можете ли вы вставить результат своих элементовInDays: method? Я думаю, что ваш filterArray не получил нужного результата. –

ответ

0

Ваш indexPath.row сбрасывается при переключении секций заставляя его начать печать с начала повторений массива каждый раз, когда вы начните новый день.

+0

как я могу решить эту проблему ?, теперь я вижу, как она возвращается к началу массива reps, но как это исправить? –

+0

попробуйте использовать счетчик, который увеличивается каждый раз, когда вы вводите функцию tableViewcellForRowAtIndexPath' для печати правильного представления массива reps – charris861

+0

вместо использования двух отдельных массивов, было бы проще, если бы я сохранил данные массива в JSON? я думаю, что я могу отображать данные с именем упражнения и соответствующими представителями. Или это будет точно так же с массивами? –

Смежные вопросы