2012-04-09 11 views
10

Próbuję zrobić do aplikacji, która korzysta z bazy danych (właściwie w moim localhost), próbowałem z ASIHTTPRequest ale mając tyle kłopotów z iOS 5 (dowiedziałem się, jak korzystać z formularza ASIHTTPRequest tam: http://www.raywenderlich.com/2965/how-to-write-an-ios-app-that-uses-a-web-serviceProśba o NSURLRequest

teraz próbuję z API dostarczonego przez Apple: NSURLRequest/NSURLConnection etc ...

czytam przewodnik online Apple i zrobić ten pierwszy kod:

- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 

    // Do any additional setup after loading the view, typically from a nib. 



    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL 

           URLWithString:@"http://localhost:8888/testNSURL/index.php"] 

           cachePolicy:NSURLRequestUseProtocolCachePolicy 

           timeoutInterval:60.0]; 



    [request setValue:@"Hello world !" forKey:@"myVariable"]; 



    NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self]; 

    if (theConnection) { 

     receiveData = [NSMutableData data]; 

    } 

} 

dodałem delegatów potrzebne przez API

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 

- (void)connection:(NSURLConnection *)connection 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

Oto mój kod php:

<?php 
if(isset($_REQUEST["myVariable"])) { 
    echo $_REQUEST["myVariable"]; 
} 
else echo '$_REQUEST["myVariable"] not found'; 
?> 

Więc co jest nie tak? Kiedy uruchomić aplikację, natychmiast upaść z tego wyjścia:

**

**> 2012-04-09 22:52:16.630 NSURLconnextion[819:f803] *** Terminating app 
> due to uncaught exception 'NSUnknownKeyException', reason: 
> '[<NSURLRequest 0x6b32bd0> setValue:forUndefinedKey:]: this class is 
> not key value coding-compliant for the key myVariable.' 
> *** First throw call stack: (0x13c8022 0x1559cd6 0x13c7ee1 0x9c0022 0x931f6b 0x931edb 0x2d20 0xd9a1e 0x38401 0x38670 0x38836 0x3f72a 
> 0x10596 0x11274 0x20183 0x20c38 0x14634 0x12b2ef5 0x139c195 0x1300ff2 
> 0x12ff8da 0x12fed84 0x12fec9b 0x10c65 0x12626 0x29dd 0x2945) terminate 
> called throwing an exception** 

**

myślę, to znaczy, że coś jest nie tak z tym jest line:

[request setValue:@"Hello world !" forKey:@"myVariable"]; 

To działa, jeśli skomentuję tę linię.

Moje pytanie brzmi: jak wysłać dane do PHP API, używając NSURLRequest i NSURLConnexion?

Dziękuję za pomoc.

P.S. Nawiasem mówiąc, mam słabe Wiedza o serwerze, PHP itp ...

Odpowiedz

14

spróbuj tego:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL 

          URLWithString:@"http://localhost:8888/testNSURL/index.php"] 

          cachePolicy:NSURLRequestUseProtocolCachePolicy 

          timeoutInterval:60.0]; 

[request setHTTPMethod:@"POST"]; 
NSString *postString = @"myVariable=Hello world !"; 
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]]; 

NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self]; 

if (theConnection) { 

    receiveData = [NSMutableData data]; 

} 

zobaczyć tutaj https://stackoverflow.com/a/6149088/1317080

+0

Dziękuję za szybką odpowiedź! Niestety to nie działa: przed kompilacją mam błąd: "Brak widocznego interfejsu @ dla NSURLRequest deklaruje selektor" setHTTPMethod ":/ – Edelweiss

+1

zmienić twoje żądanie na NSMutableURLRequest, zredagowałem moją odpowiedź również –

+1

Cóż, aplikacja się nie zawiesza! Jak mogę uzyskać dostęp do odpowiedzi mojego serwera? Myślę, że to jest w receiveData? Jaką wiadomość powinienem wysłać do niego, aby odzyskać mój "Hello world"? – Edelweiss

4

Wypróbuj poniższy kod jest jednym z prostych sposobów zużyj usługę internetową (json)

NSURL *url = [NSURL URLWithString:@"yourURL"]; 

NSMutableURLRequest *urlReq=[NSMutableURLRequest requestWithURL:url]; 

NSURLResponse *response; 

NSError *error = nil; 

NSData *receivedData = [NSURLConnection sendSynchronousRequest:urlReq 
               returningResponse:&response 
                 error:&error]; 
if(error!=nil) 
{ 
    NSLog(@"web service error:%@",error); 
} 
else 
{ 
if(receivedData !=nil) 
{ 
    NSError *Jerror = nil; 

    NSDictionary* json =[NSJSONSerialization 
         JSONObjectWithData:receivedData 
         options:kNilOptions 
         error:&Jerror]; 

    if(Jerror!=nil) 
    { 
    NSLog(@"json error:%@",Jerror); 
    } 
} 
} 

Mam nadzieję, że to pomoże.