2011-07-16 10 views
2

申し訳ありません私はまだnoobであり、私が行くとすぐに良いプログラムを学ぶことによって右足を開始したいと思ってプログラムを学習しています。私はCLLocationManagerとMKReverseGecoderを使って自分の位置を取得しています。 MKReverseGecoderDelegateメソッドでは、MKMapViewで表示する注釈を作成します。私の吹出しでは、詳細な開示インジケータを使用して、小さな黒い吹き出しの泡を見るのとは対照的に、あなたの現在の住所をうまく表示する別のUITableViewを表示します。オブジェクト指向のデザイン質問、iPhone

私のDetailViewController(UITableView)がデータを取得する良い方法はありますか?私はファーストクラスに住所、州、郵便番号のivarsを持っていますか?私のMKReverseGecoderDelegateで、私がその情報を取得したときにそれらのivarsを設定します。 (私がivarsを必要とする理由は、MKReverseGeocoderDelegateでその情報を取得する私の方法がdisplayDetailViewControllerとは別であるからです)。そして、私はDetailViewControllerに同じ値を持たせて、DetailViewControllerを表示すると同じ変数を設定しますか?それは冗長なようだ。

ご協力いただければ幸いです。ありがとう!あなたは私はあなたがそれを修正する助けて喜んでいるだろう知っているどこいずれかを立ち往生した場合

答えて

0

一つのオプション

@interface YourClassName : NSObject 
{ 
    NSString *address; 
    NSString *state; 
    NSString *zipcode; 
} 

@property(nonatomic, retain) NSString *address; 
@property(nonatomic, retain) NSString *state; 
@property(nonatomic, retain) NSString *zipcode; 
@end 

@implementation YourClassName 
@synthesize address,state,zipcode; 

-(void)dealloc 
{ 
    [super dealloc]; 
    [address release]; 
    [state release]; 
    [zipcode release]; 
} 
@end 


//Create object of YourClassName and set values 
YourClassName *objYourClassName = [[YourClassName alloc] init]; 
objYourClassName.address = @"YourValue"; 
objYourClassName.state = @"YourValue"; 
objYourClassName.zipcode = @"YourValue"; 

Pass this object to your DetailViewController by one method after creating method like 

-(void)setDetailsForDetailViewController:(YourClassName*)pObjYourClassName 
{ 
    //self.objOfYourClassName is property declared in your detailviewcontroller. 
    self.objOfYourClassName = pObjYourClassName; //You can use self.objOfYourClassName to set values in TableViewController. 
} 

ようNSObjectのを継承するカスタムクラスを宣言します。

+0

これはかなり意味があります。私のフォローアップは、私がMKReverseGeocoderDelegateメソッドでその新しいオブジェクトを作成するのは、それがアドレス情報を取得するからです。次に、コールアウトの詳細開示ボタンが押された別のメソッドでのみ、そのオブジェクトを新しい設定メソッドに渡すにはどうすればよいのですか。 – Crystal

+0

MKReverseGeocoderDelegateを使用してYourClassNameのivarを持つクラスを作成し、それを設定してから、後で別のメソッドに渡しますか?これは「ハザイ」関係ですか?組成? – Crystal

0

オンデマンドで逆ジオコーディングを行う場合、DetailViewControllerを注釈の座標で初期化します。このような何か:それは、コントローラは、位置パラメータに依存すること、コントローラのユーザーのために、それが明確になるため

- (id)initWithCoordinate:(CLLocation*)location { 
    if (self = [super initWithNibName:@"DetailController" bundle:nil]) { 
     self.location = location; 
    } 
    return self; 
} 

これは、コントローラを作成するための一般的なパターンです。他の選択肢(グローバル変数、またはシングルトン)は情報を隠し、コントローラを理解しやすくして単体テストを行うため、きれいではありません。

コントローラに、非同期タスクを起動させてジオコーディングを行い、デリゲートとして設定し、完了したら情報を提示します。

関連する問題