• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

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 ;)
 
Wirf das weg und benutze einfach subdataWithRange:.

P.S.: Mach Dich mal mit Zeigern vertraut.
 
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
 
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