NSFetchResultController para mostrar loggings en un Apple Watch?

¿Puedo usar NSFetchResultController en Apple Watch para mostrar 80 a 90 loggings en la tabla?

Estoy usando WKInterfaceTable+IGInterfaceDataTable para hacer uso de los methods de carga del tipo de WKInterfaceTable+IGInterfaceDataTable de datos porque eso me parece simple que usar NSArray .

¿ NSFetchResultController ayudará a boost la eficiencia o la hará más lenta?

Descubrí que NSFetchResultController no es útil en absoluto en la aplicación iWatch porque WKInterfaceTable no admite el método de delegado para editar, modificar o eliminar para una única fila compatible con NSFetchResultController en delegado. así que tendrás que actualizar todos los datos que quieras mostrar cada vez, así que creo que no deberíamos usarlo.

Utilicé NSFetchedResultController y WKInterfaceTable para mi aplicación Apple Watch. Es cierto que no es tan conveniente como un UITableViewController , pero es muy factible. No tengo problemas de performance, ni siquiera en la carga de más de 20 filas (no probé 80-90). Por supuesto, esto está en el simulador, así que no sé cómo se comportarán los dispositivos.

Inserte, actualice y elimine, debe implementarse, pero no es tan difícil.

Debajo de una parte de mi código en InterfaceController, con la fila de inserción como un ejemplo, pero editar y eliminar no es más difícil:


Interfaz

 ... @property (weak, nonatomic) IBOutlet WKInterfaceTable *interfaceTable; @property(strong, nonatomic) NSFetchRequest *fetchRequest; @property(strong, nonatomic) NSFetchedResultsController *fetchedResultsController; @property(strong, nonatomic) NSMutableArray *data; ... 

Implementación

La búsqueda es la misma que siempre, excepto que no asignamos un delegado al control de resultados, sino que guardamos los datos directamente:

 self.fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"YourModel" inManagedObjectContext:self.managedObjectContext]; self.fetchRequest.entity = entityDescription; [self.fetchRequest setSortDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"createdAt" ascending:YES]]]; self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:self.fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil]; [self.fetchedResultsController performFetch:&error]; self.data= self.fetchedResultsController.fetchedObjects; 

Luego utilizo una function loadTableData :

 - (void)loadTableData { [self.interfaceTable setNumberOfRows:[[self data] count] withRowType:@"YourCustomCell"]; [self.interfaceTable insertRowsAtIndexes:[NSIndexSet indexSetWithIndex:[[self data] count]] withRowType:@"YourRowType"]; for (int i = 0; i<[[self data] count];i++) [self configureRowControllerAtIndex:i]; } 

Qué llamadas configureRowControllerAtIndex , una function que llena una fila (tengo dos tags):

 - (void)configureRowControllerAtIndex:(NSInteger)index { WKTableVIewRowController *listItemRowController = [self.interfaceTable rowControllerAtIndex:index]; [listItemRowController setTitle:[[self.data[index] title] integerValue]]; [listItemRowController setDescription:[self.data[index] description]]; } 

Cuando inserte una nueva fila, simplemente managedObjectContext manualmente en managedObjectContext y en la matriz de datos:

 // Add in managedObjectContext NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"YourModel" inManagedObjectContext:self.managedObjectContext]; YourModel *newRow = [[YourModel alloc] initWithEntity:entityDescription insertIntoManagedObjectContext:nil]; // Add in data array [self.data addObject:newRow]; 

y guarde regularmente managedObjectContext:

 if (![self.managedObjectContext save:&error]) { if (error) { NSLog(@"Unable to save changes."); NSLog(@"%@, %@", error, error.localizedDescription); } } 

Obtener NSFetchedResultsController trabajando con WKInterfaceTable es un PITA. Demonios, la asignación de matrices simples / dictionarys de datos a WKInterfaceTable es WKInterfaceTable mierda. Construimos y abrimos una biblioteca simple para facilitar esto, al less haciendo que la API sea similar a UITableView . Solo tenía algo de ayuda externa para agregar soporte para NSFetchedResultsController . Espero que esto pueda ayudar en el futuro.

https://github.com/Instagram/IGInterfaceDataTable