1

アプリで Web サービスを使用し、Web サイトに投稿をアップロードしたいのですが、最初は ASIFormRequest API を使用しました。シミュレーターでは機能しましたが、デバイスでは機能しませんでした。ここで質問したところ、API を変更して使用するように言われました。 RestKit (ここに私の前の質問へのリンクがあります)

現在、RestKit API を使用していますが、同じ問題が発生しました。デバイスによって Web サイトに投稿できませんが、シミュレーターを使用すると機能します。投稿はできませんが、シミュレーターとデバイスの両方でログインできます。

POSTのコードは次のとおりです。

- (IBAction)addLinkPressed:(UIButton *)sender {
[RKClient clientWithBaseURLString:@"http://MyWebsite.com"];
    NSDictionary* params = [NSDictionary dictionaryWithObjectsAndKeys:
                            self.linkField.text, @"url",
                            self.linkTitleField.text, @"title",
                            self.linkSummaryField.text, @"summary",
                            nil];

    [[RKClient sharedClient] post:@"/send_link.php" params:params delegate:self];

}

- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error {
    NSRange range = [[error localizedDescription] rangeOfString:@"-1012"];
    if (range.length > 0){
        //Do whatever here to handle authentication failures
    }
    RKLogError(@"Hit error: %@", error);
}

- (void)request:(RKRequest*)request didLoadResponse:(RKResponse*)response
{
    if ([request isGET]) {
        // Handling GET /foo.xml

        if ([response isOK]) {
            // Success! Let's take a look at the data
            NSLog(@"Retrieved XML: %@", [response bodyAsString]);
        }

    } else if ([request isPOST]) {

        // Handling POST /other.json
        if ([response isJSON]) {
            NSLog(@"Got a JSON response back from our POST!");
        }

    } else if ([request isDELETE]) {

        // Handling DELETE /missing_resource.txt
        if ([response isNotFound]) {
            NSLog(@"The resource path '%@' was not found.", [request resourcePath]);
        }
    }

    NSLog(@"HTTP status code:     %d", response.statusCode);
    NSLog(@"HTTP status message:  %@", [response localizedStatusCodeString]);
    NSLog(@"Header fields: %@", response.allHeaderFields);
    NSLog(@"Body: %@", response.bodyAsString);
}

RestKit API で受け取るエラーは次のとおりです。

    2012-09-11 22:33:01.053 (NameOfMyApp)[16271:707] I restkit.support:RKCache.m:189 Invalidating cache at path: /var/mobile/Applications/897B1DEA-1767-4F5C-AC8F-1809075C5CA9/Library/Caches/RKClientRequestCache-(Mywebsite).com/SessionStore
    2012-09-11 22:33:01.057 (NameOfMyApp)[16271:707] I restkit.network.reachability:RKReachabilityObserver.m:123 Reachability observer initialized with IP address: 0.0.0.0.
    2012-09-11 22:33:01.075 (NameOfMyApp)[16271:707] I restkit.network.reachability:RKReachabilityObserver.m:391 Network availability has been determined for reachability observer <RKReachabilityObserver: 0x10066330 host=0.0.0.0
2012-09-11 22:33:01.075 (NameOfMyApp)[16271:707] I restkit.network.reachability:RKReachabilityObserver.m:391 Network availability has been determined for reachability observer <RKReachabilityObserver: 0x10066330 host=0.0.0.0 isReachabilityDetermined=YES isMonitoringLocalWiFi=NO reachabilityFlags=-R -----l->
2012-09-11 22:33:01.325 (NameOfMyApp)[16271:707] I restkit.network:RKRequest.m:689 Status Code: 200
2012-09-11 22:33:01.328 (NameOfMyApp)[16271:707] HTTP status code:     200
2012-09-11 22:33:01.332 (NameOfMyApp)[16271:707] HTTP status message:  no error
2012-09-11 22:33:01.338 (NameOfMyApp)[16271:707] Header fields: {
    "Cache-Control" = "no-store, no-cache, must-revalidate, post-check=0, pre-check=0";
    Connection = "Keep-Alive";
    "Content-Encoding" = gzip;
    "Content-Length" = 4679;
    "Content-Type" = "text/html";
    Date = "Wed, 12 Sep 2012 03:33:02 GMT";
    Expires = "Thu, 19 Nov 1981 08:52:00 GMT";
    "Keep-Alive" = "timeout=5, max=100";
    Pragma = "no-cache";
    Server = Apache;
    Vary = "Accept-Encoding";
}
2012-09-11 22:33:01.345 (NameOfMyApp)[16271:707] Body: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

これらのコードの後に​​、私が POST に使用するアドレスの HTML コードを示します ( http://MyWebsite.com/send_link.php )

どうすればよいか考えていただければ幸いです。本当に助けが必要です:(

4

1 に答える 1

0

答えを見つけました。シミュレーターでは、URL アドレスの先頭に http:// を付ける必要はありませんが、デバイスでは、http:// を入力しない場合、Web サービスを使用する Web サイトはそうではありません。投稿させてください。変じゃないですか!コメントありがとうございます。もう1つ、アプリを閉じて再度開くと、ログインする必要があります。ユーザー名とパスワードを永続化する方法はありますか?

于 2012-09-12T17:23:18.863 に答える