如何从tableview控制器传递数据到另一个视图控制器在Objective-C?



我是objective c for mac os的新编程,我有一个连接到api的代码,并在NSTableview中显示此api (json)的信息。现在我要做的是传递表格单元格的数据当一个单元格被点击时,传递给另一个新的视图控制器并在这个新的视图控制器中显示在表格上被点击的信息

这是我用来将数据放入表中的代码:

- (void)viewDidLoad {
[super viewDidLoad];
_climas = [[NSMutableArray alloc] init];
[self CargarDatos];
// Do any additional setup after loading the view.
}

-(void) CargarDatos{
[_climas removeAllObjects];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//Entradas y salidas
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];

[self InicializarProgress];
[manager GET:@"https://serviciorestismael.azurewebsites.net/weatherforecast"
parameters:nil
headers:nil
progress:nil
success:^(NSURLSessionTask *task,id responseObject){

self -> datosJson = (NSDictionary *) responseObject;

for (NSObject* key in self ->datosJson){

Clima *clima = [[Clima alloc] init];
[clima setClimaId:(NSString *)[key valueForKey:@"climaId"]];
[clima setClimaSummary:(NSString *)[key valueForKey:@"climaSummary"]];
[clima setClimaDate:(NSString *)[key valueForKey:@"climaDate"]];
[clima setClimaTemperatureC:(NSString *)[key valueForKey:@"climaTemperatureC"]];
[clima setClimaTemperatureF:(NSString *)[key valueForKey:@"climaTemperatureF"]];

[self->_climas addObject:clima];
}
//Esperar 5 segundos
[NSThread sleepForTimeInterval:5.0f];
[self->_Tabla reloadData];
[self FinalizarProgress];
}
failure:^(NSURLSessionDataTask * operation, NSError *error) {

NSLog(@"Error: %@", error);
[self FinalizarProgress];
}];
}
//MARK: NSTableViewDataSoruce
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView{
return [_climas count];
}
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn 
*)tableColumn row:(NSInteger)row{
Clima *p = [_climas  objectAtIndex:row];
NSString *identifier = [tableColumn identifier];
NSString *columna = [p valueForKey:identifier];
return columna;
}
- (void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell forTableColumn: 
(NSTableColumn *)tableColumn row:(NSInteger)row
{
if(tableView == self.Tabla)
{
if (row == [tableView editedRow] && [[tableView tableColumns] indexOfObject:tableColumn] == [tableView editedColumn])
{
NSLog(@"cell string value is %@",[cell stringValue]);
}
}
}

开始?

如果你刚刚开始iOS/Mac开发,或者苹果是你的第一个编程堆栈,也许可以从通知开始。这是第一个教程,今天在谷歌。看起来不错。

超出基本

当您对此感到满意时,还有许多其他方法可以适合架构考虑。像FRP (rxcocoa, Combine)或依赖注入(一个控制器引用另一个控制器)或多投委托。对于这些问题,你可以谷歌一些教程,尝试一下,并发布一个具体的问题。从基本的通知开始。

最新更新