NSString zu NSArray hinzufügen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Mac & i Test Abo
  • Es bleibt schichtweg das Problem, dass du, appdeveloper, schon seit ein paar Wochen hast: Dir fehlt eine klare Definition des Models. Ich mein, deine Daten fallen doch nicht vom Himmel. Die solltest du erstmal in einem Model richtig ordnen. Jeden zweiten Tag liest man hier von dir indem du fragst wie du wo an deine Daten ran kommst und das Ganze ist IMO darin begründet, dass du keine Model-Definition hast.
    [self setSignature:null];
    [[self postCount] increment];
  • Du hast also ein Model das etwa so aussieht:

    Quellcode

    1. //.h-File
    2. #import <Cocoa/Cocoa.h>
    3. @interface MyModel : NSObject {
    4. NSNumber* Altitude;
    5. NSString* BeschreibungApp;
    6. NSUInteger MyID;
    7. NSImage* MyIcon;
    8. }
    9. @property (retain) NSNumber* Altitude;
    10. @property (retain) NSString* BeschreibungApp;
    11. @property (retain) NSUInteger MyID;
    12. @property (retain) NSImage* MyIcon;
    13. @end
    14. // .m-File
    15. #import "MyModel.h"
    16. @implementation MyModel
    17. @synthesize Altitude, BeschreibungApp, MyID, MyIcon, … ;
    18. @end
    Alles anzeigen


    Und wo ist da genau dein Problem eine weitere Property dazu zu klatschen?
    [self setSignature:null];
    [[self postCount] increment];
  • Ich weiß, wir hatten das Thema schon 100x, aber:
    JSON ist keine Datenbank, war es nie und wird es bis mindestens 2022 auch nicht sein!*

    JSON heißt JavaScript Object Notation. Wo steht da was von Database? Nirgends.
    Also hör bitte auf von einer JSON Datenbank zu schreiben.

    +durchatme+

    Also, noch einmal ganz von vorn.
    JSON liefert dir nichts weiter als ein Objekt. Der Aufbau deiner JavaScript Object Notation entspricht ungefähr dem eines verschachtelten Dictionaries.
    Du hast also Stringwerte, an Hand derer du die einzelnen Dictionaries unterscheiden kannst und in diesen Dictionaries hast du dann weitere Stringwerte, die die Eigenschaften deines Objektes repräsentieren.

    Was du jetzt tun musst, ist Folgendes:
    bau dir ein Datenmodell entsprechend dessen, was das unterste Objekt deiner JavaScript Object Notation darstellt.
    Gemäß deines Arrayaufbaus ist dies sicherlich eine Art PointOfInterest.

    Diesem Modell, dieser Klasse PointOfInterest gibst du die Instanzvariablen, die du benötigst.

    C-Quellcode

    1. CLLocation * location; // bestehend aus Altitude , Latitude, Longitude - aber frag mich nicht nach der Reihenfolge.
    2. NSString * title; //description wird schwierig, da du damit die Methode -description überschreiben würdest - also überleg dir was Anderes oder lass beschreibungApp halt ganz weg.
    3. NSUInteger id; //keine Ahnung, ob du das wirklich brauchst
    4. NSImage * icon; // wenn du direkt ein Bild zuordnen möchtest - sonst geht auch ein String mit dem Namen oder dem Pfad
    5. NSURL * homepage; // kannst du als computed property nutzen und dann mit der id arbeiten oder du machst das so.
    6. NSString * name;
    7. NSString * city;


    Und statt stumpf deine JavaScript Object Notation in ein Array zu überführen wirfst du die Daten in dieses Modell.

    C-Quellcode

    1. NSMutableArray * heurigerArray = [NSMutableArray arrayWithCapacity:[jsonArray count]];
    2. for(id heuriger in jsonArray)
    3. {
    4. PointOfInterest * currentHeuriger = [PointOfInterest new];
    5. [currentHeuriger setLocation:[[CLLocation alloc] initWithCoordinate:CLLocationCoordinate2DMake([heuriger objectForKey:@"latitude"], [heuriger objectForKey:@"longitude"]) altitude:[heuriger objectForKey:@"altiitude"] horizontalAccuracy:30.0 verticalAccuracy:30.0 timestamp:[NSDate date]];
    6. [currentHeuriger setName:[heuriger objectForKey:@"name"]];
    7. // ... und so weiter und so fort.
    8. [heurigerArray addObject:currentHeuriger];
    9. }


    Sobald du einen derartigen Datenstand hast, darfst du dich wieder melden.
    Dann erkläre ich dir auch gern, wie du statt permanent eine feste Property 'distance' zu setzen mit einer computed property -distanceToLocation: arbeiten kannst, um deine gewünschte Entfernung zu berechnen.
    Solltest du weiterhin daran festhalten, deine JavaScript Object Notification als Datenbank behandeln zu wollen (beispielsweise weil du denkst, mit diesem Irrglauben würdest du schneller fertig), werden sämtliche Threads von dir künftig bei mir auf der Ignore-Liste landen.


    *) Falls doch hoffe ich mich daran zu erinnern diesen Post aktualisieren zu müssen. ;)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Lucas de Vil schrieb:

    Ich weiß, wir hatten das Thema schon 100x, aber:
    JSON ist keine Datenbank, war es nie und wird es bis mindestens 2022 auch nicht sein!*

    JSON heißt JavaScript Object Notation. Wo steht da was von Database? Nirgends.
    Also hör bitte auf von einer JSON Datenbank zu schreiben.

    +durchatme+

    Also, noch einmal ganz von vorn.
    JSON liefert dir nichts weiter als ein Objekt. Der Aufbau deiner JavaScript Object Notation entspricht ungefähr dem eines verschachtelten Dictionaries.
    Du hast also Stringwerte, an Hand derer du die einzelnen Dictionaries unterscheiden kannst und in diesen Dictionaries hast du dann weitere Stringwerte, die die Eigenschaften deines Objektes repräsentieren.

    Was du jetzt tun musst, ist Folgendes:
    bau dir ein Datenmodell entsprechend dessen, was das unterste Objekt deiner JavaScript Object Notation darstellt.
    Gemäß deines Arrayaufbaus ist dies sicherlich eine Art PointOfInterest.

    Diesem Modell, dieser Klasse PointOfInterest gibst du die Instanzvariablen, die du benötigst.

    C-Quellcode

    1. CLLocation * location; // bestehend aus Altitude , Latitude, Longitude - aber frag mich nicht nach der Reihenfolge.
    2. NSString * title; //description wird schwierig, da du damit die Methode -description überschreiben würdest - also überleg dir was Anderes oder lass beschreibungApp halt ganz weg.
    3. NSUInteger id; //keine Ahnung, ob du das wirklich brauchst
    4. NSImage * icon; // wenn du direkt ein Bild zuordnen möchtest - sonst geht auch ein String mit dem Namen oder dem Pfad
    5. NSURL * homepage; // kannst du als computed property nutzen und dann mit der id arbeiten oder du machst das so.
    6. NSString * name;
    7. NSString * city;


    Und statt stumpf deine JavaScript Object Notation in ein Array zu überführen wirfst du die Daten in dieses Modell.

    C-Quellcode

    1. NSMutableArray * heurigerArray = [NSMutableArray arrayWithCapacity:[jsonArray count]];
    2. for(id heuriger in jsonArray)
    3. {
    4. PointOfInterest * currentHeuriger = [PointOfInterest new];
    5. [currentHeuriger setLocation:[[CLLocation alloc] initWithCoordinate:CLLocationCoordinate2DMake([heuriger objectForKey:@"latitude"], [heuriger objectForKey:@"longitude"]) altitude:[heuriger objectForKey:@"altiitude"] horizontalAccuracy:30.0 verticalAccuracy:30.0 timestamp:[NSDate date]];
    6. [currentHeuriger setName:[heuriger objectForKey:@"name"]];
    7. // ... und so weiter und so fort.
    8. [heurigerArray addObject:currentHeuriger];
    9. }


    Sobald du einen derartigen Datenstand hast, darfst du dich wieder melden.
    Dann erkläre ich dir auch gern, wie du statt permanent eine feste Property 'distance' zu setzen mit einer computed property -distanceToLocation: arbeiten kannst, um deine gewünschte Entfernung zu berechnen.
    Solltest du weiterhin daran festhalten, deine JavaScript Object Notification als Datenbank behandeln zu wollen (beispielsweise weil du denkst, mit diesem Irrglauben würdest du schneller fertig), werden sämtliche Threads von dir künftig bei mir auf der Ignore-Liste landen.


    *) Falls doch hoffe ich mich daran zu erinnern diesen Post aktualisieren zu müssen. ;)


    ok ok.. habs schon gelöst
  • Mike schrieb:

    appdeveloper schrieb:

    ok ok.. habs schon gelöst

    Schon ist gut, der Post von Lucas ist schon zwei Wochen alt ;) :D

    14 Tage Zeit zum Lernen. :)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P