0

少し問題があります。phpとJsonを使用して外部データベースから情報を取得しようとしています。ローカルホストから試してみると動作しますが、URLを変更して外部URLを入力しても何も返されません。つまり、ローカルで作業している場合(xamppとphpmyadmin)は機能しますが、データベースから母集団を返しましたが、外部DBから実行しようとすると機能しません。コードに何か問題がありますか?外部サーバーでホストされているphpスクリプトを実行すると、データが返されます。Objective-Cコードの問題です

//Método que devuelve las poblaciones

-(NSMutableArray * )obtenerPoblaciones
{
pobla = [[NSMutableArray alloc] init];  

URLpobalciones = @"http://deproba.netau.net/devolver_poblaciones.php";
NSURL *url = [NSURL URLWithString:URLpobalciones];
NSData *data = [NSData dataWithContentsOfURL:url];
NSError *error;
NSArray *items = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions     error:&error];


NSDictionary *item = [[NSDictionary alloc] init];
// This will print all the names of people in your JSON.
for (item in items)
{
    NSString *poblae =[NSString stringWithFormat:[item valueForKey:@"nombre"]];
    [pobla addObject:poblae];
}

return pobla;

}


変形

またあったね!コードを変更しました。シンプルなものを手に入れて、もっと複雑にしたいと思っています。phpスクリプトとobjective-cコードを変更しました

PHPファイル

<?php
header('Content-type: application/json');
$miArray = array(utf8_encode("París")=>"Francia", "Madrid"=>utf8_encode("España"));
echo(json_encode($miArray));
?>

Objective-Cコード

//NSURL *url = [NSURL URLWithString:@"http://search.twitter.com/search.json?q=g8production"];
NSURL *url = [NSURL URLWithString:@"http://prueba.vacau.com/php/prueba.php"];
NSData *jsonData = [NSData dataWithContentsOfURL:url];

if (jsonData != nil) {
    NSError *error = nil;
    id result = [NSJSONSerialization JSONObjectWithData:jsonData options:    (NSJSONReadingMutableContainers) error:&error];
    if (error == nil) {
        NSLog(@"Poblacion %@",result);
    }else
    {
        NSLog(@"jsonData  is empty");
    }
}

URL(http://search.twitter.com/search.json?q=g8production)を使用すると正常に機能しますが、phpスクリプトを使用すると機能しません。if / elseステートメントを印刷します:jsonDataは空ですあなたが私を助けてくれることを願っています。再度、感謝します!

4

2 に答える 2

0

現時点ではコメントを書くことができないので、それは答えでなければなりません。同意します。あなたのコードは問題ないようです。問題はサーバースクリプトで何かをする必要があります。

しかし、私が見ているものに関して:

pobla = [[NSMutableArray alloc] init]; 

私が見るように、これはiVarでなければなりません。代わりにアクセサーを使用してください。iVar の名前を直接使用しないでください。プロジェクトで ARC が有効になっていない場合は、メモリ リークが発生している可能性があります。保持プロパティを介して設定した後、代わりに autorelease を使用してください。

次に、なぜこれを使用するのかわかりません:

NSDictionary *item = [[NSDictionary alloc] init];
// This will print all the names of people in your JSON.
for (item in items) {...}

高速列挙を考えている場合は、次のように書くことができます。

for (NSDictionary *item in items) {...}

列挙しているオブジェクトを明示的に割り当てる必要はありません。それらはすでにアイテム配列内にあります。

于 2012-05-29T09:57:07.040 に答える
0

できます!jsonlint.com で JSON を検証しようとすると、エラーが見つかりました。問題は無料のホスティングです。広告を追加すると、JSON バリデータが JSON 形式が正しくないことを通知します。実際のホスティングでテストしましたが、動作します。コンソールには、PHP から JSON を取得した値が表示されます。あなたはかっこいい

于 2012-05-30T11:25:20.297 に答える