ios - microsoft - visual studio installer
¿Cómo puedo recargar los datos en una vista de tabla de WatchKit? (6)
Creo que tiene que hacer dos cosas simultáneamente para lograr el mismo resultado de tableview.reloadData () función de iOS, para volver a cargar una tabla en el reloj con los datos recientes haga lo siguiente: Método de tabla de 1 llamada: setNumberOfRows 2-loop a través de las filas actualizando valores.
vacationList.setNumberOfRows(dict.count, withRowType: "vacationRow")
for index in 0..<vacationList.numberOfRows {
if let controller = vacationList.rowControllerAtIndex(index) as? VacationRowcontroller {
controller.vacation = dict.objectForKey("/(index)") as? NSDictionary
}
}
sugerencia: dict = diccionario de datos recién recargados desde el backend.
Tengo una aplicación para iPhone con Tableview, cuyos datos provienen de CoreData.
Los mismos datos también se muestran en una aplicación de visualización:
Si agrego una fila desde la aplicación de iPhone:
y recargo datos en la aplicación Watch:
¡Veo las viejas filas vacías!
Si detienes la aplicación del reloj y la vuelvo a iniciar, ¡todo aparece correctamente!
Este es el código para llenar el Tableview en la aplicación de reloj
-(void)awakeWithContext:(id)context{
[super awakeWithContext:context];
[self loadTable];
}
-(void)loadTable{
NSLog(@"loadTableData");
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Data"];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Data"
inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortByDate = [[NSSortDescriptor alloc] initWithKey:@"sortedDateAndTime" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortByDate, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
self.watchMArray = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
// [self.watchTableView setRowTypes:self.watchMArray];
[self.watchTableView setNumberOfRows:self.watchMArray.count withRowType:@"data"];
for (NSInteger i = 0; i < self.watchMArray.count; i++)
{
WatchTableCell *cell = [self.watchTableView rowControllerAtIndex:i];
NSManagedObject *data = [self.watchMArray objectAtIndex:i];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
//Background Thread
UIImage *foto =[self loadImageFromData:[data valueForKey:@"imageData"]];
dispatch_async(dispatch_get_main_queue(), ^(void){
//Run UI Updates
[cell.watchImage setImage:foto];
[cell.watchDate setText:[NSString stringWithFormat:@"%@", [data valueForKey:@"dataEOra"] ]];
});
});
}
}
Este es el código que estoy usando actualmente para recargarlo:
- (IBAction)reloadTable {
[self loadTable];
}
Donde me equivoco
Descubrí que llamar a setNumberOfRows: rowType no actualiza la tabla a menos que la llame desde el método willActivate. Tenía un método de delegado al que llamaba desde un controlador modal que recuperaba un nuevo conjunto de registros de la aplicación principal y luego volvía a cargar la tabla. Aunque la impresión de numberOfRows mostró el nuevo número de filas que configuré, visualmente las filas existentes todavía se mostraban en la pantalla. Fue solo después de que puse una marca en mi método de delegado y luego en willActivate verifiqué esa bandera y solo luego volví a cargar la tabla, se actualizó la pantalla.
En el enlace @leolobato publicado, en realidad hay una solución. Resolvió mi problema.
https://devforums.apple.com/message/1098875#1098875
cuando cambies tus filas solo configúralos en = @ "" primero.
Por ejemplo, si su fila tiene una fila. La etiqueta y usted la están cambiando, haga fila.Label.text = @ "" otra vez justo después de la fila.Label.text = @ "[Texto real]"
Llamando a setRowTypes:
o setNumberOfRows:withRowType:
método.
A continuación hay una declaración del documento del desarrollador, creo que esto funcionará.
Cuando desee actualizar el contenido de una tabla, llame a setRowTypes: o setNumberOfRows: withRowType: nuevamente con la nueva información de tipo de fila. Volver a llamar a estos métodos obliga a la tabla a descartar las filas antiguas y crear otras nuevas. Para insertar nuevas filas sin eliminar las antiguas, use el método insertRowsAtIndexes: withRowType :.
Para recargar los datos, cambie su IBAction a:
- (IBAction)reloadTable {
[self.watchTableView setNumberOfRows:self.watchMArray.count withRowType:@"data"];
}
De la documentación del desarrollador de Apple en WKInterfaceTable :
Este método elimina cualquier fila existente de la tabla y configura un nuevo conjunto de filas según la información en los parámetros numberOfRows y rowType.
Dado que está usando setNumberOfRows:withRowType:
en su código original, lo he usado aquí. El método setRowTypes:
también logra el mismo efecto.
Para watchOS 5.1, iOS 12.1 solo funcionó si agregué setNumberOfRows:withRowType:
en el método didAppear
. El uso de awake(withContext:)
o willActivate
no funcionó para mí. Las primeras 4 filas estaban en blanco.