NSURLRequest преобразование NSData в массив - PullRequest
0 голосов
/ 04 марта 2011

Мне нужно преобразовать данные, полученные из Интернета через массив в скрипте PHP, в массив, из которого я могу извлечь значения.Вот мой код!

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
    //NSString *payloadAsString = [NSString stringWithUTF8String:[receivedData bytes]];
    NSArray *payloadAsString = [NSKeyedUnarchiver unarchiveObjectWithData:receivedData];
    [payloadAsString finishEncoding];
    verified = [payloadAsString objectAtIndex:0];
     NSLog(@"logging");
     //NSString *no = [[NSString alloc] init stringWithCString:verified];
    NSLog(@"%@", verified);
    if([verified isEqualToString:@"admin"]){
    NSLog(@"test admin");
            [self performSelector:@selector(changeViewAdmin) withObject:nil afterDelay:0.05];
        }
        if([verified isEqualToString:@"user"]){
        NSLog(@"test user");
            [self performSelector:@selector(changeView) withObject:nil afterDelay:0.05];
        }
        if([verified isEqualToString:@"No"]){
        NSLog(@"test no");
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
    message:@"Invalid UserName/Password combination!"
    delegate:self
    cancelButtonTitle:@"Okay"
    otherButtonTitles:nil];
    [alert show];
    [alert release];
        }
    [payloadAsString release];
    //NSLog(@"%@", verified);
    //  INSERT GOOGLE MAPS URL REQUEST HERE
    /*if(requestType == 1){
    NSString* addressText = payloadAsString;
    // URL encode the spaces
    addressText =  [addressText stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding];  
    NSString* urlText = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@", addressText];
    // lets throw this text on the log so we can view the url in the event we have an issue
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]];
    // */
    //
    //}
    [connection release];
    self.receivedData = nil;
}

К сожалению, моя консоль возвращает ноль и спрашивает, не вставил ли я метод -finishencoding. Вопрос в том, если это правильно, где мне это сделать?

PS: Еще один вопрос: если я получаю массив данных из базы данных, лучше ли использовать PHP-скрипт?Спасибо.

Ответы [ 2 ]

2 голосов
/ 05 марта 2011

1) Из всего этого кода единственная строка, относящаяся к вашему вопросу:

NSArray *payloadAsString = [NSKeyedUnarchiver unarchiveObjectWithData:receivedData];

Я действительно сомневаюсь, что PHP-скрипт возвращает вам данные в формате, совместимом с NSKeyedUnarchiver. Я считаю, что единственная причина, по которой вы не получаете исключение NSInvalidArgumentException из этого метода, заключается в том, что receivedData равно nil (вы его где-нибудь инициализировали?). Попробуйте сделать строку из того, что вы получаете, как это

[[[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding] autorelease]

и войдите в систему. Из этого, надеюсь, будет понятно, как разобрать ответ.

2) Не называйте экземпляры NSArray, например, «blahBlahString». Строки и массивы совершенно разные.

0 голосов
/ 29 декабря 2014

NSKeyedUnarchiver может разархивировать только экземпляры, созданные экземплярами класса NSKeyedArchiver.

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSKeyedUnarchiver_Class/index.html

...