Skocz do zawartości

Witaj!

Zaloguj lub Zarejestruj się aby uzyskać pełny dostęp do forum.

Zdjęcie
- - - - -

Problem z konwersją NSData to NSArray


  • Zaloguj się, aby dodać odpowiedź
5 odpowiedzi w tym temacie

#1 pio11

pio11
  • 1 700 postów

Napisano 10 sierpnia 2013 - 14:40

Witam. Mam pewien problem, którego nie potrafię rozwiązać. Mianowicie pobieram sobie z serwera dane do programu w formacie:
[[id, dana1, dana2, dana3],[id, dana1, dana2, dana3],[id... itd.]]

Kod, którym staram się przekształcić NSData na potrzebne mi NSArray wygląda tak:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)d {
    [RecivedData appendData:d];
    
    NSError *error;
    NSPropertyListFormat plf = 1;
    NSArray *arrayRecivedData = [NSPropertyListSerialization propertyListWithData:d options:0 format:&plf error:&error];
    
    NSLog(@"%@", arrayRecivedData);
    
    [delegate connectionControllerdidReceiveData:arrayRecivedData];
}

Program dla zmiennej arrayRecivedData non stop zwraca mi null. Może ktoś wie gdzie robię błąd?

#2 tmkszlc

tmkszlc

  • 1 846 postów
  • SkądSzczecin, PL

Napisano 10 sierpnia 2013 - 14:49

Podajesz jako opcję 0, może należy podać opcję:
   NSPropertyListBinaryFormat_v1_0 = kCFPropertyListBinaryFormat_v1_0
?

btw. metoda zwraca null. Czy w takim razie może nie zwróciła żadnego błędu? Nie opisałeś tego więc muszę się domyśleć.

#3 pio11

pio11
  • 1 700 postów

Napisano 10 sierpnia 2013 - 15:03

Racja, nie sprawdziłem błędu. To jest błąd kiedy konwertuję metodą XML:
Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Unexpected character [ at line 1) UserInfo=0x80ad530 {NSDebugDescription=Unexpected character [ at line 1, kCFPropertyListOldStyleParsingError=The operation couldn’t be completed. (Cocoa error 3840.)}
Taki wyskakuje przy binarnym formacie:
2013-08-10 15:57:01.731 NightNavi[3336:c07] Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Unexpected character 2 at line 1) UserInfo=0x7466d60 {NSDebugDescription=Unexpected character 2 at line 1, kCFPropertyListOldStyleParsingError=The operation couldn’t be completed. (Cocoa error 3840.)}

Szczerze przyznam, że troszkę nie rozumiem tego błędu. To znaczy jedno co przychodzi mi do głowy to to, że serwer zwraca mi w niewłaściwym do konwersji formacie dane. Jednak ja piszę tylko aplikację na iOS, a ktoś inny zajmuje się stroną serwerową i miło byłoby rozwiązać ten problem bez zmiany "[" na "{" przy formacie xml co podejrzewam rozwiązałoby sprawę.

Jednakże opcje powinny mieć wartość 0. Tak mówi dokumentacja:

NSPropertyListReadOptions
The read options are not currently implemented and the value should be set to 0.

typedef NSUInteger NSPropertyListReadOptions;


Natomiast wartość " NSPropertyListFormat plf = 1;" to właśnie to o czym piszesz:
enum {
   NSPropertyListOpenStepFormat = kCFPropertyListOpenStepFormat,
   NSPropertyListXMLFormat_v1_0 = kCFPropertyListXMLFormat_v1_0,
   NSPropertyListBinaryFormat_v1_0 = kCFPropertyListBinaryFormat_v1_0
}; NSPropertyListFormat;
typedef NSUInteger NSPropertyListFormat;


#4 tmkszlc

tmkszlc

  • 1 846 postów
  • SkądSzczecin, PL

Napisano 10 sierpnia 2013 - 15:51

Wydaje mi się, że serwer powinien ci zwracać dane w jakimś konkretnym formacie. To co opisałeś w przykładzie to jest PRAWIE JSON, ale nie do końca. Może spróbój tą NSData przekonwertować na NSString i później coś z tym zrobić?

#5 P_P

P_P
  • 131 postów
  • SkądWarszawa

Napisano 10 sierpnia 2013 - 19:06

to jest JSON
NSArray *arrayRecivedData = [NSJSONSerialization JSONObjectWithData:d options:NSJSONReadingAllowFragments error:&error]


#6 pio11

pio11
  • 1 700 postów

Napisano 10 sierpnia 2013 - 19:13

Super działa, P_P wielkie dzięki za pomoc :D




Użytkownicy przeglądający ten temat: 1

0 użytkowników, 1 gości, 0 anonimowych