2014-02-09 3 views
2

Это моя точка зрения таблицы до сих пор: нажмите hereКак получить конкретную ячейку в TableView

Как вы можете видеть, у меня есть 4 детали в моем TableView. Я загрузил их с массивом Core Data. В моем ядре данных ядра у меня есть атрибут под названием «Платный», установленный в значение BOOLEAN по умолчанию «НЕТ». Мой вид таблицы ссылается на страницу DetailViewController, в которой есть кнопка «Платная». Когда пользователь нажимает на эту кнопку, этот конкретный элемент получает отметку «PAID». Так что в моей cellForRowAtIndexPath я проверяю, уплачен ли товар или нет. На картинке показано, что мой код здесь не так, потому что только один элемент отмечен как заплаченный. Однако, когда я NSLog другие элементы в представлении таблицы, они также отмечены «Платные». Вот код для моего метода cellForRowAtIndexPath:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];  
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];   

NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"OwedMoney"]; 
YouOweArray = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy]; 
OwedMoney *YouOweObject = [YouOweArray objectAtIndex:indexPath.row]; 

if (YouOweObject.paid.boolValue == NO) 

{ 

    [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; 
    [cell setBackgroundColor:[UIColor redColor]]; 
} 

else if (YouOweObject.paid.boolValue == YES) 
{ 

    [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
    [cell setBackgroundColor:[UIColor greenColor]]; 
} 

В моей DetailViewController У меня есть кнопка «оплачено» с помощью следующего кода:

- (IBAction)paid:(id)sender { 

    //Fetch Entity 

    NSManagedObjectContext *context = [self managedObjectContext]; 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"OwedMoney"]; 

    //Create an array that stores the contents of that entity 

    youOweArray = [[context executeFetchRequest:fetchRequest error:nil] mutableCopy]; 

    //Create managedObjectId 

    NSManagedObject *YouOweData = [youOweArray objectAtIndex:0]; 
    NSManagedObjectID *moID = [YouOweData objectID]; 

    //Successfully got the managedObjectId 

    NSLog(@"This is the id %@", moID); 

    BOOL Found = NO; 
    OwedMoney *Object; 


    for (OwedMoney *OwedObject in youOweArray) 
    { 
     NSManagedObjectID *OwedId = [OwedObject objectID]; 

     NSLog(@"%@", OwedObject); 
     if (OwedId == moID) 
     { 
      Found = YES; 
      Object = OwedObject; 
      break; 
     } 

    } 

    if (Found) 
    { 

     BOOL isPaid = Found; 
     Object.paid = [NSNumber numberWithBool:isPaid]; 

     NSLog(@"Is it paid: %@",Object.paid.boolValue? @"Yes":@"No"); 

     NSError *error = nil; 
     [self.managedObjectContext save:&error]; 
    } 
} 
+0

Это типа булевой – doc92606

+0

NSNumber скорее всего –

+0

Я обновил код. Какая может быть ошибка, если только моя первая ячейка правильно отвечает на код, а не другие ячейки? – doc92606

ответ

0

Возьмите ссылку выбранного объекта из главного контроллера и поставить что в вашей строке:

NSManagedObject *YouOweData = [youOweArray objectAtIndex:0]; 

и заменить его как;

NSManagedObject *YouOweData = [youOweArray objectAtIndex:i]; 

Чтобы проверить выбранную строку в вашем mainController, вы должны сделать недвижимость в DetailViewController:

@property (nonatomic) int selectedIndex; 

В MainController, вы должны установить значение свойства в didSelectRowAtIndexPath. Предположим, что detailController является объектом DetailViewController.

Установить как:

detailController.selectedIndex = indexPath.row; 

В detailViewController:

NSManagedObject *YouOweData = [youOweArray objectAtIndex:selectedIndex]; 
+0

, поэтому i это: NSIndexPath * i = [tableView indexPathForSelectedRow]; – doc92606

+0

Но это в моем DetailViewController. Как получить выделенный объект моего TableViewController в моем DetailViewController? – doc92606

+0

Например, я могу сделать NSIndexPath * i = [tableView indexPathForSelectedRow] Но в моем DetailViewController у меня нет доступа к моему tableView. Я даже не могу сделать [youOweArray ObjectAtIndex: indexPath.row]; – doc92606

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