Могу ли я использовать переменные экземпляра с NSManagedObject? - PullRequest
0 голосов
/ 30 сентября 2010

Итак, я получил сущности уровня и плитки. Уровень имеет множество отношений с Tile. Плитка имеет свойство index.

Сейчас я использую этот код для сортировки массива тайлов уровня:

- (NSArray *)sortedTiles  
{  
    NSMutableArray *sortedTiles = [NSMutableArray arrayWithArray:[self.tiles allObjects]];  
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"index" ascending:YES];  
    [sortedTiles sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];  
    [sortDescriptor release];  
    return sortedTiles;  
}

Это работает, но я хочу иметь возможность получить одну плитку с определенным индексом, поэтому я написал этот метод в Level.h:

- (Tile *)tileWithIndex:(NSInteger)index;

Реализация довольно проста:

- (Tile *)tileWithIndex:(NSInteger)index  
{  
    NSArray *sortedTiles = [self sortedTiles];  
    Tile *tile = [sortedTiles objectAtIndex:index];  
    return tile;  
}

Теперь, конечно, это не самый эффективный способ сделать это, потому что массив плиток должен каждый раз выделяться и сортироваться, поэтому я подумал: если я просто добавлю переменную экземпляра в Level, 'sortedTiles', тогда Мне не придется восстанавливать его каждый раз. Но Level является подклассом NSManagedObject, так что это возможно и / или целесообразно сделать?

1 Ответ

0 голосов
/ 30 сентября 2010

Я бы не стал.NSManagedObjects являются отражением записи в базе данных, и добавление дополнительных переменных-членов вне модели кажется мне добавлением чего-то, что не принадлежит.

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

В больших или сложных ситуациях вы можете использовать NSFetchRequestController для сбора, сортировки и выдачииз NSManagedObjects по мере необходимости.Это хорошо интегрируется в UITableViewController.Я не проводил никакого тестирования производительности, но для ситуации, когда существует потенциально большое количество записей, я попытался бы сначала сделать это, чтобы увидеть, достаточно ли собственного управления кэшем классов Fetch Results.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...