Accéder au contenu principal

Articles

Affichage des articles du août, 2020

UITableView avec multi-sélection sur Mac Catalyst

Si vous mettez à YES les attributs Multi Selection  et Multi Sélection During Editing d'un UITableView, cela ne fonctionnera pas comme attendu sur Mac. C'est juste énervant et voici ubout de code qui règle le problème. #if TARGET_OS_MACCATALYST -( NSIndexPath *) tableView :( UITableView *)tableView willSelectRowAtIndexPath :( NSIndexPath *)indexPath {     if ([tableView. indexPathsForSelectedRows containsObject :indexPath]) {         [tableView deselectRowAtIndexPath :indexPath animated : NO ];         return nil ;     }     return indexPath; } -( NSIndexPath *) tableView :( UITableView *)tableView willDeselectRowAtIndexPath :( NSIndexPath *)indexPath {     if ([tableView. indexPathsForSelectedRows containsObject :indexPath]) {         return nil ;     }     return indexPath; } -( BOOL ) tableView :( UITableView *)tableView shouldHighlightRowAtIndexPath :( NSIndexPath *)indexPath {     for ( NSIndexPath *ip in tableView. indexPathsForSelectedRows ) {         [tabl

UIApplication::OpenURL deprecated

La fonction UIApplication::OpenURL est deprecated car Apple désire pouvoir ajouter des options et surtout un handler qui permet de vérifier que l'opération s'est bien déroulée. Comme mes applications sont compilées pour IOS9 (iPad2) cette nouvelle fonction ne peut pas être utilisé car elle est apparue avec IOS 10. Il faut donc mettre un test sur la version d'IOS, mais cela ne suffit pas car il reste le warning deprecated qui devrait disparaitre mais qui ne disparait pas ce qui est pour le moins agaçant et il faut ajouter des #pragma pour enlever le warning.    NSURL *url = [ NSURL URLWithString : "http://monsite.fr" ];    if ( @available (iOS 10.0 , *)) {     [[ UIApplication sharedApplication ]  openURL :url                                         options : @{}                               completionHandler : nil ];   } else { #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations"      [[ UIApplication sharedApplic

Anonymisation d'un fichier CSV

 Bon, c'est pas parfait, mais cela fait le job : #!/usr/bin/perl my @lower = ( 'a' .. 'z' ); my @upper = ( 'A' .. 'Z' ); my @digit = ( '0' .. '9' ); my $row0 = <STDIN>; # ignore la première ligne (noms des colones) print $row0; while ( read (STDIN,$b, 1 )) {  if ($b=~/[a-z]/)    { print $lower[ int rand @lower]; } elsif ($b=~/[A-Z]/) { print $upper[ int rand @upper]; } elsif ($b=~/[ 0-9 ]/) { print $digit[ int rand @digit]; } else { print $b; } } Ce script ne touche pas à la première ligne du CSV qui contient normalement les noms des colonnes, puis cela remplace tous les caractères ASCII minuscules pour une minuscule au hasard, idem pour les majuscules et les chiffres. Pour faire un outil pro, il faudrait analyser par cellule et reconnaitre une date, une heure, des coordonnées GPS, etc. Et les remplacer par des données cohérentes.

Sélecteur de fichier pour exporter un fichier avec MacCatalyst

Lorsque l'on gère des fichier sous IOS, on utilise généralement UIDocumentInteractionController pour exporter vers n'importe où le fichier. Avec MacCatalyst cela ne fonctionne pas et il vaut mieux utiliser UIDocumentPickerViewController en mode ExportToService.   NSURL *url = [ NSURL fileURLWithPath :file]; #if TARGET_OS_MACCATALYST  UIDocumentPickerViewController *browser = [[UIDocumentPickerViewController alloc] initWithURL:url inMode:UIDocumentPickerModeExportToService];   assert (browser);  browser. modalPresentationStyle = UIModalPresentationFormSheet ;  browser. directoryURL = [ NSURL   fileURLWithPath : NSHomeDirectory ()];  [ self presentViewController :browser animated : YES completion : nil ]; #else  documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:url];  assert(documentInteractionController);  documentInteractionController.delegate = self ;  CGRect frame = [sender convertRect:CGRectMake( 0 , 0 , sender.fra