Objective-C:访问另一个类中的变量

时间:2013-08-01 19:35:35

标签: objective-c class poptoviewcontroller

在我的应用程序中,我试图访问在一个类(ClassC)中设置的变量,然后将2个视图弹出到ClassA,并且该视图(ClassA)需要访问ClassC中设置的变量。让我们看看我是否可以让它更清晰一点:

我的ClassC中的一个按钮调用此方法:

-(IBAction) mapItBtn:(id)sender
{
    MapAnnotation* target = [[MapAnnotation alloc] initWithTitle:building.Name subTitle:@"" Coordinate:CLLocationCoordinate2DMake(building.Latitude, building.Longitude)];

    DIRlat = building.Latitude;
    DIRlon = building.Longitude;

    [mapUI removeAnnotations:mapUI.annotations];
    [mapUI addAnnotation:target];
    [mapUI selectAnnotation:target animated:YES];
    [[mapUI viewForAnnotation:target] setCanShowCallout:YES];

    MKCoordinateRegion region;
    region.center=target.coordinate;
    region.span.latitudeDelta=mapUI.region.span.latitudeDelta;
    region.span.longitudeDelta=mapUI.region.span.longitudeDelta;

    [mapUI setRegion:region animated:TRUE];

    [mapUI setHidden:NO];

    [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:(self.navigationController.viewControllers.count - 3)] animated:YES];
 }

完成最后一行和应用popsToViewController:...objectAtIndex:...-3后,该视图(ClassA)需要访问ClassC中DIRlatDIRlon的值。类导入结构是ClassA导入的ClassB,它导入ClassC。

任何关于如何最好地完成这项任务的建议都将受到极大的赞赏!

谢谢!

编辑:我尝试过的事情,但都没有成功:

在ClassA中创建变量,然后在ClassC中我有@implementation ClassA@synthesize AVariable,但是这导致了Parse问题,其中ClassA导致将ClassB读作未知类型。

上述代码的相反操作,如在ClassC中创建变量,然后在ClassA中创建@implementation ClassC。这导致循环依赖(Mach-O链接器错误)。

我目前要完成的事情是制作单身课程,但由于我没有经验,所以进展缓慢。

1 个答案:

答案 0 :(得分:0)

答案:按照找到here的指南创建Singleton类解决了我的问题。

修改:显示代码解决方案:

MKLocationManagerSingleton.h

#import <Foundation/Foundation.h>

@interface MKLocationManagerSingleton : NSObject {
    double MKlat;
    double MKlon;
}
@property (nonatomic, readwrite) double MKlat;
@property (nonatomic, readwrite) double MKlon;
+ (id)sharedManager;
@end

MKLocationManagerSingleton.m

#import "MKLocationManagerSingleton.h"
@implementation MKLocationManagerSingleton
@synthesize MKlat, MKlon;
#pragma mark Singleton Methods

+ (id)sharedManager {
    static MKLocationManagerSingleton *sharedMKLocationManagerSingleton = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    sharedMKLocationManagerSingleton = [[self alloc] init];
    });
    return sharedMKLocationManagerSingleton;
}

- (id)init {
    if (self = [super init]) {
    }
    return self;
}

- (void)dealloc {   
}
@end

并要求MKlat和MKlon的值:

MKLocationManager *sharedManager = [MKLocationManager sharedManager];
destination.latitude = sharedManager.MKlat;
destination.longitude = sharedManager.MKlon;