2014-02-08 2 views
0

У меня есть TableViewController, называемый HomeTableViewController, загруженный данными из массива Core Data. Я попытался получить идентификатор объекта из выбранной ячейки следующим образом:Как получить NSManagedObjectId и получить данные

//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); 

Я был в состоянии получить managedObjectId. Но здесь сложная часть. Теперь я хочу выполнить итерацию через свой массив и получить все объекты. Затем я хочу получить объект, равный выбранной ячейке, и получить доступ к его логическому значению «Платный». Я сделал это так:

BOOL Found = NO; 
OwedMoney *OwedObject; 
NSManagedObjectID *OwedId = [OwedObject objectID]; 

for (OwedMoney *OwedObject in youOweArray) 
{ 

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

} 

if (Found == YES) 
{ 

BOOL isPaid = YES; 
OwedMoney *Object = OwedObject; 
Object.paid = [NSNumber numberWithBool:isPaid]; 

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

Хотя при запуске приложения «Найден» никогда не соответствует YES. Это означает, что мои объекты Id не совпадают. Я хотел бы узнать, как найти выбранную ячейку просмотра таблицы, захватить NSManagedObjectId и получить доступ к ее атрибутам.

Вся помощь приветствуется, спасибо заранее.

ответ

1

Вы перебираете массив, но никогда не меняете OwedId на какой элемент, который вы смотрите в массиве. Это должно работать:

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"); 
} 
+0

Я реализовал это и Paid до сих пор не возвращался – doc92606

+0

Ах фигу, незначительная ошибка с моей стороны, это возвращение Да! – doc92606

0

Я думаю, что проблема находится на линии 9.

if(OweID == moID) 

Вероятно ID объекта (не сама информация ID) управляемого объекта изменилось. Использование == сравнивает только ссылки. Попробуйте использовать

if([OweID isEqual::moID]) 

Томас

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