我对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类进行对话。
我知道解决这个问题的几种方法,但我想知道如何通过这种方式来实现它,以提高我对语言的基本理解。
感谢阅读!
答案 0 :(得分:0)
那是因为您正在分配LocationManager
的新实例。您可以在它们之间连接两个控制器,例如声明属性并相应地设置它们。
例如,如果从控制器B
实例化控制器A
,则应为控制器B
实现一个属性,如firstController
,所以:
B *controller = [[B alloc] init];
controller.firstController = A;
然后从B
控制器内部控制控制器A
另一种方法是实例化和控制ApplicationDelegate
中的所有内容。这是一种更强大的模式。