1

В iOS6 coredata я пытаюсь создать приложение, похожее на слайд-шоу (через объекты db один за другим, следуя определенной последовательности). Это очень просто, и я мог бы даже использовать NSFetchedResultsController. Теперь проблема заключается в том, что в определенных ситуациях я получаю сущность, и мне нужно будет «перейти» к этому объекту, не зная индекса этого объекта.Найти индекс объекта по значению свойства

Одним из возможных решений является объединение объектов по одному. Мне просто интересно, есть ли другой способ получить «индекс» этого объекта. Вот псевдо-код, описывающий проблему:

NSFetchRequest

  • Отсортированных Сущности: нужный тип объекта, заказ по дате последнего обновления
  • ** нужно узнать индекс в приведенном выше перечне объекта по идентификатор объекта или уникальный идентификатор.

В SQL, я хотел бы сделать что-то вроде

select ROWINDEX 
from (
    select ROWNUM as ROWINDEX, uid 
    from entity_table 
    order by lastupdatedate desc 
) 
where uid="abc" 

Спасибо.

ответ

1

Возможно, вы не в полной мере понимаете вас. Однако. FetchedResultsController имеет свойство .fetchedObjects, которое является массивом. Я бы подумал, что вы можете легко перемещаться в этом массиве, чтобы делать все, что вам нужно.

Вы не указали, как вы хотели бы идентифицировать сущность, которой вы подвергаетесь; Вы могли бы, конечно, использовать метод грубой силы, как вы предложили, чтобы найти то, что вы ищете:

for (NSManagedObject *obj in fetchedResultsController.fetchedObjects) 
{ 

} 

, если результирующий набор мал. Если набор результатов слишком велик для того, чтобы это было сделано эффективно, вы можете попробовать использовать NSPredicate для фильтрации массива fetchedObjects, что, вероятно, было бы предпочтительнее. Смотрите ссылку на Using NSPredicate with Core Data NSFetchedResultsController

+0

Ok. Благодарю. RegularExpression. Это будет работать для меня. Поскольку я новичок в CoreData, просто хочу убедиться, что я ничего не пропустил. –

+1

NSFetchedResultsController также имеет метод 'indexPathForObject:', который может быть полезен здесь. –

+0

Мартин, вы правы! Теперь я использую этот метод. Еще не проверял. Но это похоже на то, что я искал. Благодарю. –

0

Если у вас есть массив всех объектов, которые отсортированы, вы можете найти индекс следующим образом

NSArray *objects = ...//Sorted Array 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"uid=='abc'"]; 
NSUInteger index = [objects indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { 
    return [predicate evaluateWithObject:obj]; 
}]; 
Смежные вопросы