NSData Typ Herausfinden

  • NSData Typ Herausfinden

    Ich habe es nun geschafft, mir ein Netzwerk aufzubauen, indem sich die Geräte finden und auch Sachen schicken können.
    Aber ich weiß einfach keine Lösung für dieses eigentlich simple Problem.

    Wie finde ich nun am besten heraus , um was es sich eigentlich handelt bei dem Datenempfänger?
    z.B Habe ich einmal in Array, in dem sich Objekte des Typs "Spieler" befinden und einmal ein Array, welches Objekte vom Typ "Fragen" behinhaltet, und manchmal auch nur Strings.
    Beide sollen hin und her geschickt werden, aber nun muss ich ja herausfinden, worum es sich bei dem ankommenden NSData überhaupt handelt.
    Gibt es da eine gängige Methode?
  • Wenn Du die einzelnen Objekte vor dem Sender mit NSArchiver oder NSKeyedArchiver in ein NSData Objekt verwandelt hast, dann kannst Du dieses NSData Objekt doch einfach per NSUnarchiver oder NSKeyedUnarchiver wieder in das "original" Objekt zurück wandeln. Das resultierende Objekte kannst Du dann einfach mit isKindOfClass/isMemberOfClass auf eine spezielle Klasse prüfen.

    Da Du aktuell alles in verschiedene NSArray Objekte speicherst, würde es sich evtl. anbieten für jedes Array ein kleines Wrapper Objekt zu verwenden, um die Unterscheidung der einzelnen Inhalte zu erleichtern. Alternativ könntest Du das Array vor dem Senden auch in ein NSDictionary packen und dort z.B. Infos zum jeweiligen Inhalt hinterlegen, also z.B. mit den Key/Value Paaren: "Type"/"Player", "Array"/array oder "Type"/"Questions", "Array"/array, usw.
  • Genau das was du als erstes geschrieben hast, habe ich probiert, doch als ich dann einen NSString rübergesendet habe, gab es eine Fehlermeldung, weil er es dann nicht mit dem NSUnarchiver entpacken konnte, kann das sein?

    Was bedeutet denn "Wrapper Objekt" wenn ich fragen darf? :)

    Wie gesagt, es sind ja nur nur Arrays, damit hätte es auch so geklappt, aber ein Sstring zB wird ja anders dekodiert oder geht es auch mit dem NSUnarchiver?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von crvchul ()

  • Alle Objekte, die das NSCoding Protokoll implementieren, können per NSCoder (NSArchiver, NSKeyedArchive) archiviert werden. Wenn Du eigene Klassen erstellt und bei diesen das NSCoding Protokoll implementierst, dann lassen sich auch die Objekte dieser Klasse(n) per NSCoder archivieren.

    Schau Dir einfach mal den Archives and Serializations Programming Guide an.

    Du solltest halt aus allen Objekten ein Archiv machen und dieses senden, dann ist es auf der empfangenden Seite deutlich einfacher daraus wieder die richtigen Objekte zu erzeugen.