2011-07-16 143 views
2

对不起,我仍然是一个小菜鸟,只是学习编程,因为我去了,想通过先学习好的设计从右脚开始。我正在使用CLLocationManager和MKReverseGecoder来获取我的位置。在我的MKReverseGecoderDelegate方法中,我创建了我的注释以显示在MKMapView上。在我的标注中,我使用了详细披露指标来展示另一个显示您当前地址的UITableView,而不是查看小黑色泡泡。面向对象的设计问题,iPhone

什么是我的DetailViewController(UITableView)获取数据的好方法?我有我的第一堂课有地址,州,邮政编码的ivars。在我的MKReverseGecoderDelegate中,当我得到这些信息时设置这些ivars。 (我认为我需要ivars的原因是因为我的方法在MKReverseGeocoderDelegate中获取信息与displayDetailViewController分开)。然后,我有我的DetailViewController具有相同的值,当我去显示DetailViewController时,设置那些相同的变量?看起来多余。

任何帮助将不胜感激。谢谢!

回答

0

一种选择

声明自定义的类继承NSObject的像

@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. 
} 

如果你坚持在任何地方,让我知道,我会很乐意帮助你解决这个问题。

+0

是的,它非常有意义。我的后续将是,所以我会在我的MKReverseGeocoderDelegate方法中创建这个新对象,因为那是我获取地址信息的地方。那么如何将该对象传递给我的新设置方法,因为我只想在按下标注的详细信息按钮的单独方法中传递该对象。 – Crystal

+0

我有我的课,我使用MKReverseGeocoderDelegate有一个YourClassName的伊娃,设置它,然后在我的其他方法传入它?这是“有一个”的关系吗?组成? – Crystal

0

如果您按需进行反向地理编码,请使用注释的坐标初始化DetailViewController。事情是这样的:

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

这是一个共同的模式来创建控制器,因为它明确了该控制器取决于位置参数控制器的用户。其他选择(全局变量或单例)并不那么干净,因为它们隐藏信息并使控制器更难理解和单元测试。

然后让控制器启动一个异步任务来执行地理编码,将自己设置为委托,并在完成时显示信息。