iCulture forum | iPhone, iPad,  iPod touch, Apple TV en iOS

iCulture forum | iPhone, iPad, iPod touch, Apple TV en iOS (https://forum.iculture.nl/)
-   Ontwikkelen voor iOS (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/)
-   -   Voeg BOOL waarde toe aan NSString (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/53277-voeg-bool-waarde-toe-nsstring.html)

MacShack 02-02-10 00:04

Voeg BOOL waarde toe aan NSString
 
Dag,

Ik heb een NSString stringWithFormat waar ik een SOAP bericht maak om te communiceren met een WS (Web Service).

In die string will ik een aantal elementen van een waarde voorzien. Een int %i waarde, een string %@ of %s waarde maar ook een BOOL waarde.

Wat is het tekentje om een BOOL Waarde mee te geven? Ik heb al %b geprobeerd maar dat werkt niet.

Ik hoop dat iemand mij kan helpen.

wubbe 02-02-10 10:09

Een BOOL is een int (of char)
 
In 'C' en ook in Objective-C bestaat een Boolean niet echt. Gebruik een %i of %d om de 0 of 1 waarde weer te geven.
Als je TRUE en FALSE wil weergeven moet je met if/then aan de gang of een conditionele expressie toevoegen.

Code:

Try this:  hold down command and double-click on the word YES in XCode.
You should see the file objc.h:
#define YES            (BOOL)1
#define NO              (BOOL)0

So as you can see, YES is actually just a symbol that maps to an
integer (1 or 0), not a string. If you're wondering about BOOL,
try command-double clicking on it and you will see:
typedef signed char  BOOL;


Whacko 02-02-10 17:02

Wat dacht je van de ? operator:

[NSString stringWithFormat:@"mijnBoolean: %@", mijnBooleanWaarde ? @"true" : @"false"];

wubbe 02-02-10 17:28

Dat heet een conditionele expressie zoals ik al noemde.
Met een voorbeeld leg je het natuurlijk veel beter uit!

Frog 02-02-10 17:30

Wubbe heeft gelijk, een Boolean is gewoon een soort int. Als je een Boolean wilt controleren moet je ook doen "if (boolean == 1)" en niet "if (boolean == "YES"). Je kant dat natuurlijk afkorten door if (boolean) te doen, maar dat terzijde.

Whacko 02-02-10 17:50

@wubbe sorry, overheen gelezen :)

MacShack 02-02-10 18:23

Citaat:

Oorspronkelijk geplaatst door Frog (Bericht 411804)
Wubbe heeft gelijk, een Boolean is gewoon een soort int. Als je een Boolean wilt controleren moet je ook doen "if (boolean == 1)" en niet "if (boolean == "YES"). Je kant dat natuurlijk afkorten door if (boolean) te doen, maar dat terzijde.

Maar ik kan geen 0 of 1 meegeven aan een c# web service. Dus ik weet nu hoe ik die waarde in een NSString toevoeg maar dan begrijpt de webservice de waarde nog niet. Dus welke string moet er komen te staan in het element die een boolean waarde verwacht. Ik ben nu onderweg ik kijk zo even of ik het volgende kan doen.

NNString withFormatting @"<waarde>%d</waarde>", "false"

wubbe 02-02-10 20:01

Whacko heeft het antwoord al gegeven:
Code:

[NSString stringWithFormat:@"<waard>%@</waarde>", booleanVar ? @"True" : @"False"];

MacShack 02-02-10 23:49

Ja klopt. Ik zal even voor de anderen een voorbeeld Posten zodat ze het antwoord ook kunnen vinden in context. Want ik weet hoe frustrerend het is als iemand zegt: "ik heb het". En dan vervolgens niet het volledige antwoord geven zodat andere lezers er nog niks aan hebben.

Code:

[NSString stringWithFormat:
@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
"<soap:Body>\n"
"<WebService xmlns=\"http://www.VoorbeeldUrl.Net/Webservices/\">\n"
"<EersteInteger>%i</EersteInteger >\n"
"<TweedeInteger>%i</TweedeInteger >\n"
"<XmlString>%@</XmlString >\n"
"<Boolean>%@</Boolean >\n"
"<EersteString>%@</EersteString >\n"
"<TweedeString>%@</TweedeString >\n"
"</WebService >\n"
"</soap:Body>\n"
"</soap:Envelope>",
0,
0,
@"&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;\n&lt;XmlElement xmlns:xsi=&quot;http://www.w3.org/2001/XMLScema-instance&quot;&gt;\n&lt;/XmlElement&gt;",
@"false",
EersteString.text,
TweedeString.text
];

Ik communiceer met een webservice waar ik een aantal elementen met data moet voorzien om de juiste gegevens uit mijn database te halen via een Web Service. De XML string is een beetje raar maar dat heeft te maken met special characters die moeten vervangen worden met speciale tekencombinaties:
Code:

< = &lt;
> = &gt;
" = &quot;

Nu moet ik die XML in een UITableView zien te krijgen. Ik weet nog niet hoe dat moet. Volgens mij moet ik iets met XMLParsing doen. Als iemand een voorbeeld heeft hoe ik dat met XML data moet doen. Graag! Het liefst wil ik deze data nog niet in een SQLLite database gooien. Omdat deze xml gegevens van tijdelijke aard zijn.

wubbe 03-02-10 22:35

XML Parsen
 
Citaat:

Oorspronkelijk geplaatst door MacShack (Bericht 412010)
Nu moet ik die XML in een UITableView zien te krijgen.

Dan moet je met de NSXMLParser aan de gang.

MacShack 04-02-10 00:49

Dag Wubbe,

Dat klopt. Ik ben op dit moment met TBXML aan de gang. Het gaat goed. Tot dat ik deze foutmeldingen kreeg:

Code:

Undefined symbols:
  "_inflateInit2_", referenced from:
      -[NSData(NSDataAdditions) gzipInflate] in NSDataAdditions.o
  "_deflate", referenced from:
      -[NSData(NSDataAdditions) gzipDeflate] in NSDataAdditions.o
  "_inflateEnd", referenced from:
      -[NSData(NSDataAdditions) gzipInflate] in NSDataAdditions.o
  "_deflateInit2_", referenced from:
      -[NSData(NSDataAdditions) gzipDeflate] in NSDataAdditions.o
  "_inflate", referenced from:
      -[NSData(NSDataAdditions) gzipInflate] in NSDataAdditions.o
  "_deflateEnd", referenced from:
      -[NSData(NSDataAdditions) gzipDeflate] in NSDataAdditions.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

Ik heb echt geen idee wat dit betekent en wat ik er aan moet doen. Heb jij soms een idee?

wubbe 04-02-10 07:42

Nee, geen idee.
Het enige wat ik zie is dat er ook ge-zipt of ge-unzipt wordt. Maar dat was niet aan de orde geloof ik. Misschien heb je hem per ongeluk verteld dat het xml bestand gezipt is of zo.

MacShack 04-02-10 10:52

Citaat:

Nee, geen idee.
Het enige wat ik zie is dat er ook ge-zipt of ge-unzipt wordt. Maar dat was niet aan de orde geloof ik. Misschien heb je hem per ongeluk verteld dat het xml bestand gezipt is of zo.
Het rare is dat dit niet tijdens run time gebeurd maar tijdens het builden. Hij build namelijk met die zes foutmeldingen. Verder roep ik geen zip methodes aan. Ik heb de build map al een keer weggegooid. Want hij heeft het over NSDataAdditions.o .Terwijl er normaal een .h of .m achter staat. De 'o' staat volgens mij voor object. En gaat het om een gecompileerde file. Maar ik snap niet hoe ik hier van af moet komen. Hoe kunnen er foutmeldingen komen in een gecompileerd bestand? Of hij heeft fouten en hij compileerd niet of hij compileerd en heeft geen fouten. Of mis ik hier iets.

MacShack 04-02-10 11:05

ik heb nog een keer de hele documentatie doorgelezen ook van alle voorige versies van tbxml (www.tbxml.co.uk) en in een van de voorige omschrijvingen staat:
Citaat:


To use TBXML, simply include the 4 files into your project.
  1. In xcode right click your project file and select "New Group". Type TBXML as the group name.
  2. Right click the TBXML group and select "Add" then "Existing Files".
  3. Find and select the 4 files (TBXML.h, TBXML.m, NSDataAdditions.h, NSDataAdditions.m). Check the "Copy items into destination group's folder (if needed)" checkbox is ticked. This ensures a copy of TBXML stays with the project.
  4. Locate the Targets node in the group tree under your project. Click the arrow to expand and right click your project's target file. Select "Get Info" and navigate to the "General" tab. Click the plus symbol at the bottom of the window to add a linked library. From the list, select "libz.dylib". You can now close this info window.

Dus als ik thuis kom ga ik dit even proberen. Maar nogmaals ik zet het maar weer op het internet dan kunnen anderen na mij ook deze mogelijke oplossingen lezen. Voor het .NET framework kun je echt alles op het internet vinden. Maar voor Cocoa touch heel weinig.

Whacko 04-02-10 14:48

inderdaad even die stappen doorlopen. voornamelijk die laatste denk ik.

de error:
Undefined symbols:
"_inflateInit2_", referenced from:
-[NSData(NSDataAdditions) gzipInflate] in NSDataAdditions.o

betekent namelijk dat wanneer hij NSDataAdditions.h /.c compileert naar een .o bestand, dat er gerefereerd wordt aan _inflateInit2_ die ergens anders in het project zit. Deze kan die vervolgens niet vinden. Vermoedelijk zit die in de libz.dylib

MacShack 04-02-10 22:34

Het werkt nu. Bedankt voor jullie hulp!


Alle tijden zijn GMT +2. Het is nu 22:50.