如何让一个类更改另一个类中的变量(或对象)

时间:2011-12-12 15:36:43

标签: iphone objective-c class

我对Objective-C编程很新。虽然我能够找到自己的方式,但现在有一个我无法解决的问题,这可能是由于我犯的错误造成的,也可能是因为我对课程有着根本的误解。

基本上,我想要一个类来改变另一个类中的变量(或对象)。这是我的代码:

// LocationManager.h
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>

@interface LocationManager : NSObject <CLLocationManagerDelegate> {
    CLLocationManager *locationManager;
    CLLocation *locationByCustomLocation;
}

@property (nonatomic, retain) CLLocation *locationByCustomLocation;

@end

当然,还有一个相应的实现文件:LocationManager.m。它合成了locationByCustomLocation变量。

关键是,从另一个类,我想操纵locationByCustomLocation变量。

// viewCustomLocation.h
#import <UIKit/UIKit.h>

@interface viewCustomLocation : UIViewController <UITableViewDataSource, UITableViewDelegate> {
    UITableView *tblLocation;
    UITableViewCell *cell;
}

-

//viewCustomLocation.m
#import "viewCustomLocation.h"
#import "LocationManager.h"

@class LocationManager;

@implementation viewCustomLocation

@synthesize tblLocation;
@synthesize cell;

// some view related selectors here, but it boils down to this one:

- (void)dismissView:(id)sender
{
    [self dismissModalViewControllerAnimated:YES];

    LocationManager *locationManager = [[LocationManager alloc] init];

    // I made sure with NSLog that the customLoc variable contains the expected data
    CLLocation *customLoc = [[CLLocation alloc] initWithLatitude:place.coordinate.latitude longitude:place.coordinate.longitude];

   [locationManager setLocationByCustomLocation:customLoc];
}

现在,如果我在LocationManager.m中使用NSLog来查看LocationByCustomLocation变量中的内容,我希望与customLoc中的数据相同。相反,变量似乎仍然是空的。

我认为问题是我创建了一个LocationManager类的副本,因此在复制的类中填充了LocationByCustomLocation变量,而不是原始的变量,这就是我想要的。我无法弄清楚如何与原始的LocationManager类进行对话。

我知道解决这个问题的几种方法,但我想知道如何通过这种方式来实现它,以提高我对语言的基本理解。

感谢阅读!

1 个答案:

答案 0 :(得分:0)

那是因为您正在分配LocationManager的新实例。您可以在它们之间连接两个控制器,例如声明属性并相应地设置它们。

例如,如果从控制器B实例化控制器A,则应为控制器B实现一个属性,如firstController,所以:

B *controller = [[B alloc] init];
controller.firstController = A;

然后从B控制器内部控制控制器A

中发生的事情

另一种方法是实例化和控制ApplicationDelegate中的所有内容。这是一种更强大的模式。