面向对象的设计问题,iPhone

时间:2011-07-16 05:33:59

标签: iphone objective-c

抱歉,我仍然是一个菜鸟,只是在学习编程的时候,我想通过先学习好的设计来开始。我正在使用CLLocationManager和MKReverseGecoder来获取我的位置。在我的MKReverseGecoderDelegate方法中,我创建了我的注释以在MKMapView上显示。在我的标注中,我使用详细信息披露指示器调出另一个UITableView,它可以很好地显示您当前的地址,而不是查看小黑色标注气泡。

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

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分: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. 
}

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

答案 1 :(得分:0)

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

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

这是创建控制器的常见模式,因为它使控制器的用户清楚地知道控制器依赖于位置参数。其他替代方案(全局变量或单例)不是那么干净,因为它们隐藏信息并使控制器更难理解和单元测试。

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