• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

NSData aus anderem NSData erstellen

007sascha

Alkmene
Registriert
08.09.08
Beiträge
35
Hallo,
ich will aus einem NSData Objekt einen Bereich auswählen den ich in einem neuen NSData Objekt speichern kann.
Bisher scheitert das aber immer an einem Fehler "Program received signal: “EXC_BAD_ACCESS”."
Code:
//NSData Datenobjekt "allData" in dem alle Daten abgespeichert sind ist vorhanden.
//Neuses NSData Objekt vom Anfang aus "allData" funktioniert:
NSData* teildaten1;
teildaten1=[NSData dataWithBytes:[allData bytes] length:3];
//Nun will ich aber einen mittleren Teil aus dem Objekt "allData" herausholen.
char buffer[1];
[allData getBytes:buffer range:NSMakeRange(4,1)];
NSData* teildaten2;
teildaten2=[NSData dataWithBytes:buffer length:1];
Bitte seht mir Fehler nach, fange gerade erst mit Objectiv-C an ;)
 

Pii

Rheinischer Krummstiel
Registriert
25.06.07
Beiträge
383
Wirf das weg und benutze einfach subdataWithRange:.

P.S.: Mach Dich mal mit Zeigern vertraut.
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Mal den korrekten Hinweis von Pii beiseite gelassen. Der Code funktioniert schon, vorausgesetzt allData enthält mindestens fünf Bytes. Der Absturz mit "EXC_BAD_ACCESS" deutet darauf hin, dass dem nicht so ist.

MacApple
 

007sascha

Alkmene
Registriert
08.09.08
Beiträge
35
Vielen Dank, habe das Programm abgeändert und den Fehler gefunden.
Code:
//NSData Datenobjekt "allData" in dem alle Daten abgespeichert sind ist vorhanden.
//Neuses NSData Objekt vom Anfang aus "allData" funktioniert:
NSData* teildaten1;
teildaten1=[NSData dataWithBytes:[allData bytes] length:3];
NSData* teildaten2;
teildaten2=[allData subdataWithRange:NSMakeRange(4,1)];
Ja,ja mit Pointern muss ich mich noch mehr beschäftigen;)
Der "EXC_BAD_ACCESS" kam daher da ich das Programm nicht wie hier geschrieben hatte, sondern teildaten2 als int deklariert hatte. Somit ging der Pointer dann ins leere. Lektion 1 Pointer abgeschlossen :-D
Gruß Sascha