0

私はObjectivecに少し慣れておらず、興味深い問題に遭遇しました。JSONを使用して、GooglePlacesAPIから検索結果を取得します。これは正常に機能します。場所が見つかったら、ビジネスの詳細を表示する2番目の画面をロードします。これを行うには、placesAPIを介したplacesdetails検索を使用する予定です。2つのビュー間で情報を渡すために、変数を保持するデータクラスを作成しました。

DataClass.h

#import <Foundation/Foundation.h>

@interface DataClass : NSObject {    

    NSString *Lat;
    NSString *Long;
    NSString *barLat;
    NSString *barLong;
    NSString *Ref;
    NSString *barName;

}    
@property(nonatomic,retain)NSString *Lat;   
@property(nonatomic,retain)NSString *Long;  
@property(nonatomic,retain)NSString *barLat;  
@property(nonatomic,retain)NSString *barLong;  
@property(nonatomic,retain)NSString *Ref;
@property(nonatomic,retain)NSString *barName;
+(DataClass*)getInstance; 

@end

DataClass.m

#import "DataClass.h"

@implementation DataClass
@synthesize Lat;
@synthesize Long;
@synthesize barLat;
@synthesize barLong;
@synthesize Ref;
@synthesize barName;
static DataClass *instance =nil;    
+(DataClass *)getInstance    
{    
    @synchronized(self)    
    {    
        if(instance==nil)    
        {    

            instance= [DataClass new];    
        }    
    }    
    return instance;    
}   
@end

私の最初のビューでは、次のように参照値を追加します。

DataClass *obj=[DataClass getInstance];  
NSString *barRef = [NSString stringWithFormat:@"%@", searchResult.reference];
obj.Ref = barRef; 

searchResult.referenceは有効であり、barRefに入れてNSLogを使用すると正しく出力されますが、objオブジェクトに追加しようとするとアプリがクラッシュします。文字列は次のようになります

"CnRrAAAABX_U5FcybhlJgmWGAv19Fhemk_Bu7ytKKuL33201sKfce2aIzeZ2P8cWdKPV8hCsbUbAzYcoA9QDmbMPeYqCX8idypsQH4LXvGwxW_qtW4jBod2bufelyxeLaBlS1DoNfDtaH4evksVluW9gsqCGcRIQkJXwM_RcSewilknJowaghhoUFoR64jZTUDCsrXvmOqg4eqJx5uU"

使っても

NSStringの* barRef = @ "CnRrAAAABX_U5FcybhlJgmWGAv19Fhemk_Bu7ytKKuL33201sKfce2aIzeZ2P8cWdKPV8hCsbUbAzYcoA9QDmbMPeYqCX8idypsQH4LXvGwxW_qtW4jBod2bufelyxeLaBlS1DoNfDtaH4evksVluW9gsqCGcRIQkJXwM_RcSewilknJowaghhoUFoR64jZTUDCsrXvmOqg4eqJx5uU"。

次に、obj.Ref = barRef; クラッシュします。なぜこれが起こるのか、それを修正する方法はありますか?

4

1 に答える 1

0

辞書オブジェクトは辞書ではなく、文字列のようです。

考えられる解決策:

1)デバッガーを使用して、辞書に@"formatted_phone_number"キーがあるかどうかを確認します。コードをデバッグし、辞書が適切かどうかを確認します。NSLogを使用して辞書の内容を出力し、それが適切かどうかを確認することもできます。

2)辞書が悪い場合は、このようなものがあるかどうかを確認してください。これは、JSON形式のGoogleAPIからのHTML応答を解析する方法です。

NSDictionary *dic;
SBJsonParser *jsonParser = [SBJsonParser new];
NSError *error = NULL;
NSURLResponse *response;
NSHTTPURLResponse *httpResponse;

    //Create a URL object.
    NSURL *url = [NSURL URLWithString:urlString];

    //URL Request Object
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLCacheStorageAllowed timeoutInterval:userWaitTime];

    NSData *data = [NSURLConnection sendSynchronousRequest:request 
                                         returningResponse:&response error:&error];

    NSString *htmlString = [[NSString alloc]  initWithBytes:[data bytes]
                                                     length:[data length] encoding: NSUTF8StringEncoding];

    //NSLog (@"htmlString: %@", htmlString);

    dic = [jsonParser objectWithString:htmlString error:nil];
于 2012-05-15T11:04:21.820 に答える