Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[objC]concatenation de deux NSString

24 réponses
Avatar
pere.noel
comme je n'arrive pas à convertir des Boolean de FSIsAliasFile (c'est du
Carbon ???) en BOOL je les tranforme en chaine de caratère par un test.

j'ai besoin de retourner simultanément deux Booleans :
Boolean aliasFileFlag; et :
Boolean folderFlag;

par un test j'attribue, par exemple, à une NSString la valeur "1" ou "0"
suivant le test et, pour sotir les deux valeurs simultanément, je fais
une concaténation (je sois être compatible avec Ruby) :

NSLog(@"%@%@", aliasFileFlagStr, folderFlagStr);
NSString *outStr = [NSString stringWithFormat:@"%@%@", aliasFileFlagStr,
folderFlagStr];
NSLog(@"concatenation %@%@", aliasFileFlagStr);

le premier NSLog me retourne "10" ce qui est correct, par contre le
debuger s'arrête à la ligne "NSString *outStr =..."

si je click au niveau du deebugger sur "Continue" j'ai droit à un
"EXC_BAD_ACCESS", que je ne pige pas...

si au lieu de concaténé je ne dais que retourner une des deux valeurs
(aliasFileFlagStr ou folderFlagStr) ça passe impec...

je ne vois pas ce qui pose pb dans la ligne :


NSString *outStr = [NSString stringWithFormat:@"%@%@", aliasFileFlagStr,
folderFlagStr];

j'ai essayé aussi par un append... : même tableau )))

--
une bévue

10 réponses

1 2 3
Avatar
luc
Une bévue wrote:

comme je n'arrive pas à convertir des Boolean de FSIsAliasFile (c'est du
Carbon ???) en BOOL je les tranforme en chaine de caratère par un test.


Heu, où est la difficulté à convertir un Boolean en BOOL ? Tout ça m'a
l'air excessivement tordu (comme d'hab' :>).

je ne vois pas ce qui pose pb dans la ligne :

NSString *outStr = [NSString stringWithFormat:@"%@%@", aliasFileFlagStr,
folderFlagStr];


<http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/Artic
les/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265-SW1>

Specifier: %@
Description: Objective-C object...
^^^^^^^^^^^^^^^^^^

Est-ce qu'un Boolean ressemble de près ou de loin à un id Objective-C ?

--
Luc Heinrich

Avatar
ftestuz
Une bévue wrote:

comme je n'arrive pas à convertir des Boolean de FSIsAliasFile (c'est du
Carbon ???) en BOOL je les tranforme en chaine de caratère par un test.


Tu n'y arrives pas ? Pourtant Boolean est défini comme :

typedef unsigned char

et BOOL comme

typedef signed char

Un simple affectation ne marche pas ?

j'ai besoin de retourner simultanément deux Booleans :
Boolean aliasFileFlag; et :
Boolean folderFlag;

par un test j'attribue, par exemple, à une NSString la valeur "1" ou "0"
suivant le test et, pour sotir les deux valeurs simultanément, je fais
une concaténation (je sois être compatible avec Ruby) :

NSLog(@"%@%@", aliasFileFlagStr, folderFlagStr);
NSString *outStr = [NSString stringWithFormat:@"%@%@", aliasFileFlagStr,
folderFlagStr];
NSLog(@"concatenation %@%@", aliasFileFlagStr);

le premier NSLog me retourne "10" ce qui est correct, par contre le
debuger s'arrête à la ligne "NSString *outStr =..."


Et il n'y a aucun message dans le log ?
Quel est le type de programme ? Un fondation tool ? Et si c'est le cas,
as-tu créé un autoreleasepool ?

si je click au niveau du deebugger sur "Continue" j'ai droit à un
"EXC_BAD_ACCESS", que je ne pige pas...

si au lieu de concaténé je ne dais que retourner une des deux valeurs
(aliasFileFlagStr ou folderFlagStr) ça passe impec...

je ne vois pas ce qui pose pb dans la ligne :


NSString *outStr = [NSString stringWithFormat:@"%@%@", aliasFileFlagStr,
folderFlagStr];

j'ai essayé aussi par un append... : même tableau )))



--
Frédéric Testuz
<mailto:

Avatar
ftestuz
Luc Heinrich wrote:

Une bévue wrote:

comme je n'arrive pas à convertir des Boolean de FSIsAliasFile (c'est du
Carbon ???) en BOOL je les tranforme en chaine de caratère par un test.


Heu, où est la difficulté à convertir un Boolean en BOOL ? Tout ça m'a
l'air excessivement tordu (comme d'hab' :>).

je ne vois pas ce qui pose pb dans la ligne :

NSString *outStr = [NSString stringWithFormat:@"%@%@", aliasFileFlagStr,
folderFlagStr];


<http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/Artic
les/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265-SW1>

Specifier: %@
Description: Objective-C object...
^^^^^^^^^^^^^^^^^^

Est-ce qu'un Boolean ressemble de près ou de loin à un id Objective-C ?


Euh, il a dit que la ligne

NSLog(@"%@%@", aliasFileFlagStr, folderFlagStr);

fonctionnait correctement, donc aliasFileFlagStr et folderFlagStr sont
bien des objets.

--
Frédéric Testuz
<mailto:


Avatar
pere.noel
Luc Heinrich wrote:


Heu, où est la difficulté à convertir un Boolean en BOOL ? Tout ça m'a
l'air excessivement tordu (comme d'hab' :>).


la difficulté, pour moi, est que je ne connais PAS ObjC...

en + si j'ai bien compris, pour résoubre un alias file, il faut faire
appel à des fonctions "carbon" file system etc...




<http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/Artic
les/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265-SW1>



ouais merci mais le pb n'étant pas là...

Specifier: %@
Description: Objective-C object...
^^^^^^^^^^^^^^^^^^

Est-ce qu'un Boolean ressemble de près ou de loin à un id Objective-C ?


je ne connais pas ObjC donc ce qu'est un id, en fait j'ai trouvé une
première solution entre-temps, comme je veux tout récupérer de
"FSResolveAliasFile"

il y a sans doute plus simple mais je fais donc :

NSString* targetIsFolderStr = @"0";
if (targetIsFolder) {
targetIsFolderStr= @"1";
}
NSString* wasAliasedStr = @"0";
if (wasAliased) {
wasAliasedStr= @"1";
}
NSString *outStr = [[NSString alloc] initWithFormat:@"%@___%@_%@",
resolvedPath, wasAliasedStr, targetIsFolderStr];

donc je converti les "Boolean targetIsFolder, wasAliased;"
en NSString, je pense quil doit y avoir un moyen direct avec la page
"String Format Specifiers" que tu m'as filée...

--
une bévue

Avatar
pere.noel
Frédéric Testuz wrote:

Tu n'y arrives pas ? Pourtant Boolean est défini comme :

typedef unsigned char

et BOOL comme

typedef signed char

Un simple affectation ne marche pas ?


avec un cast du genre :

BOOL boule=(BOOL)un_boolean ???

mais bon, je n'en ai plus besoin.


j'ai besoin de retourner simultanément deux Booleans :
Boolean aliasFileFlag; et :
Boolean folderFlag;

par un test j'attribue, par exemple, à une NSString la valeur "1" ou "0"
suivant le test et, pour sotir les deux valeurs simultanément, je fais
une concaténation (je sois être compatible avec Ruby) :

NSLog(@"%@%@", aliasFileFlagStr, folderFlagStr);
NSString *outStr = [NSString stringWithFormat:@"%@%@", aliasFileFlagStr,
folderFlagStr];
NSLog(@"concatenation %@%@", aliasFileFlagStr);

le premier NSLog me retourne "10" ce qui est correct, par contre le
debuger s'arrête à la ligne "NSString *outStr =..."


Et il n'y a aucun message dans le log ?
Quel est le type de programme ? Un fondation tool ?


une petite class que j'ai appellée "MyAlias" qui me sert juste à
résoudre un alias file, voir s'il est broken, si c'est un folder ou un
fichier de données...
Et si c'est le cas,
as-tu créé un autoreleasepool ?


non je devine seulement ce que c'est un "autoreleasepool" c'est pas très
joli j'ai mis des :

CFRelease(resolvedUrl);
ou
[wasAliasedStr autorelease];
et
return [outStr autorelease];

s'il y a un moyen pour tout releaser simultanément...
--
une bévue


Avatar
pere.noel
Frédéric Testuz wrote:

Euh, il a dit que la ligne

NSLog(@"%@%@", aliasFileFlagStr, folderFlagStr);

fonctionnait correctement, donc aliasFileFlagStr et folderFlagStr sont
bien des objets.


en fait c'était bien la ligne :
NSString *outStr = [NSString stringWithFormat:@"%@%@", aliasFileFlagStr,
folderFlagStr];


qui ne voulait pas "marcher" je n'ai pas pigé pourquoi, j'ai trouvé une
première solution en utilisant :
NSString *outStr = [[NSString alloc] initWithFormat:@"%@___%@_%@",
resolvedPath, wasAliasedStr, targetIsFolderStr];

et je pense pouvoir simplifier mon code en utilisant mieux les "String
Format Specifiers" et donc convertir directement les Boolean en
string...
--
une bévue

Avatar
luc
Une bévue wrote:

comme je n'arrive pas à convertir des Boolean de FSIsAliasFile (c'est du
Carbon ???) en BOOL je les tranforme en chaine de caratère par un test.

j'ai besoin de retourner simultanément deux Booleans :
Boolean aliasFileFlag; et :
Boolean folderFlag;


Et pourquoi ne pas les mettre dans une NSArray plutôt que de convertir
en chaine que j'imagine il va falloir parser juste après de l'autre coté
(beerrk) ?

NSNumber* alias = [NSNumber numberWithBool:aliasFileFlag];
NSNumber* folder = [NSNumber numberWithBool:folderFlag];
NSArray* result = [NSArray arrayWithObjects:alias, folder, nil];

return result;

Et pourquoi tu n'écris pas plutôt une petite extension Ruby native (
c'est *très* facile, même si ton post sur comp.lang.objc me fait
redouter du résultat) qui va résoudre l'alias (ce qui est le problème de
base si j'ai bien compris tes élucubrations) et retourner des objets
Ruby directement plutôt que de transformer des pommes en oranges puis en
choucroutes puis en éclairs au chocolat ?

--
Luc Heinrich

Avatar
pere.noel
Luc Heinrich wrote:


Et pourquoi ne pas les mettre dans une NSArray plutôt que de convertir
en chaine que j'imagine il va falloir parser juste après de l'autre coté
(beerrk) ?

NSNumber* alias = [NSNumber numberWithBool:aliasFileFlag];
NSNumber* folder = [NSNumber numberWithBool:folderFlag];
NSArray* result = [NSArray arrayWithObjects:alias, folder, nil];

return result;



tout à fait d'accord avec ton beurk mais dans mes périgrinations je n'ai
pas su trouver le moyen que tu donnes juste au dessus pour transformer
les Boolean en NSNumber, c'est le première fois que j'écris qqc qui
m'est utile en ObjC..

Et pourquoi tu n'écris pas plutôt une petite extension Ruby native (
c'est *très* facile, même si ton post sur comp.lang.objc me fait
redouter du résultat)


ma première formation n'est pas du tout l'informatique, en taupe on m'a
enseigner pendant une heure le fortran IV avec pour seule conclusion
"demerden sie sich"... mais bon, c'était à une "autre époque".

quant au commentaire du gars (sur comp.lang.objective-c) me disant que
je n'étais pas sur la bonne voie, c'est faux, il l'a reconnu lui-même
(il a d'ailleurs fait un bugg report à ce sujet à Apple) c'est la docum
Apple qui est fausse , très très mal fichue aussi, beaucoup de baratin
inutile, des tas de couches historiquement empilées, un vrai foutoir,
c'est pas très sérieux pour une boite qui "cherche" à attirer des
devs...

qui va résoudre l'alias (ce qui est le problème de
base si j'ai bien compris tes élucubrations)


oui oui c'est ça, c'est une "facilité" que je laisse à l'utilisateur
final, il peut déplacer ces fichiers originaux où il veut, j'ai mis dans
un rép cache des alias de ces originaux. Mais il y a un prix à payer il
faut être capable de retrouver l'original à partir de l'alias et aussi
de savoir si l'alias est cassé ou non, d'où ma recherche de ce moyen...

quant à écrire une petite extension ruby native pour ça why not ?
quelqu'un m'avait déjà proposer d'étendre RubyAeosa, j'ai refusé, je me
sent pas assez fort en info pour ça.

mais là oui, ça m'intéresse, je vais y songer assez rapidement, juste
après avoir nettoyer mon code ObjC et le "wrapper" ruby (entre autre
passer en NSArray).
et retourner des objets
Ruby directement plutôt que de transformer des pommes en oranges puis en
choucroutes puis en éclairs au chocolat ?


oui, tout à fait d'accord, je sais bien d'aileurs que c'est un défaut
dans ma manière de procéder, au départ j'ai un code style spaghetti mais
à l'arrivée, ça s'écliarci...

je suis bordellique mais je sais où son "mes affaires"...
--
une bévue

Avatar
pere.noel
Luc Heinrich wrote:

Et pourquoi tu n'écris pas plutôt une petite extension Ruby native (
c'est *très* facile, même si ton post sur comp.lang.objc me fait
redouter du résultat) qui va résoudre l'alias (ce qui est le problème de
base si j'ai bien compris tes élucubrations) et retourner des objets
Ruby directement plutôt que de transformer des pommes en oranges puis en
choucroutes puis en éclairs au chocolat ?


si j'ai bien compris (?) avec RubyCocoa ce n'est pas intéressant de
passer par ObjC (je viens de faire le tuto "Writing Ruby Extensions with
RubyCocoa" à <http://www.rubycocoa.com/ruby-extensions-with-rubycocoa>
parce que l'appel de la classe crée nécessite :

require 'osx/cocoa'
require 'jukebox'
OSX::ns_import :Jukebox

et enfin :
j = OSX::Jukebox.alloc.initWithUnit(13)

et pour nettoyer :
GC.start

l'appel de ma petite class ObjC est nettement + simple...

mais, tjs si j'ai bien compris, écrire l'extension en C (que je connais
encore - qu'ObjC) permet, après avoir créé le *.bundle, de l'ajouter
dans un require, de faire, plus simplement :

We have to use RubyCocoa/Objective-C object allocation and initialization.
Instead of calling Jukebox.new to create our jukebox objects,
we have to perform the standard Objective-C two step initialization.
First call alloc, then the init function, in this case initWithUnit.


(à la page <http://www.rubycocoa.com/ruby-extensions-with-rubycocoa/3>)

donc question, comme il vaut mieux écrire en C, est-ce que l'appel des
procédures :

CFURLCreateWithFileSystemPath
CFURLGetFSRef ...
FSResolveAliasFile
CFURLCreateFromFSRef
CFURLCopyFileSystemPath

en gros est-ce simple de traduire ma class ObjC en C ???


--
une bévue

Avatar
luc
Une bévue wrote:

en gros est-ce simple de traduire ma class ObjC en C ???


Oui, très.

--
Luc Heinrich

1 2 3