Iphone 如何让一个类更改另一个类中的变量(或对象)
我对Objective-C编程相当陌生。虽然我已经找到了自己的方法,但现在有一个问题我无法解决,这要么是因为我犯了一个错误,要么是因为我对类有一个基本的误解 本质上,我希望一个类更改另一个类中的变量或对象。以下是我的代码:Iphone 如何让一个类更改另一个类中的变量(或对象),iphone,objective-c,class,Iphone,Objective C,Class,我对Objective-C编程相当陌生。虽然我已经找到了自己的方法,但现在有一个问题我无法解决,这要么是因为我犯了一个错误,要么是因为我对类有一个基本的误解 本质上,我希望一个类更改另一个类中的变量或对象。以下是我的代码: // LocationManager.h #import <Foundation/Foundation.h> #import <CoreLocation/CoreLocation.h> @interface LocationManager : NSO
// 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中使用NSLog来查看LocationByCustomLocation变量中的内容,我希望得到与customLoc中相同的数据。相反,变量似乎仍然是空的
我认为问题在于我创建了LocationManager类的副本,从而在复制的类中填充LocationByCustomLocation变量,而不是我想要的原始变量。我搞不懂如何和原来的LocationManager类对话
我知道一些解决这个问题的方法,但我想知道如何通过这种方法来提高我对语言的基本理解
谢谢你的阅读 这是因为您正在分配LocationManager的新实例。您可以在两个控制器之间连接两个控制器,例如声明属性并相应地进行设置 例如,如果从控制器A实例化控制器B,则应实现控制器B的属性,如firstController,因此: 然后从控制器B内部控制控制器A中发生的事情
另一种方法是实例化和控制ApplicationLegate中的所有内容。这是一种更强大的模式。它是一种更好的模式,可以实例化和控制masterController类中的所有内容,而不是应用程序委托。一般来说,您应该只在应用程序代理中执行应用程序级别的操作,如响应前台/后台更改、通知等@danipralea感谢您的回复!现在我很清楚,我确实在分配LocationManager的第二个实例。然而,虽然我现在理解了这个问题,但我不理解你提出的解决方案。你能详细说明一下吗?你到底不明白什么?这听起来可能有点幼稚,但我喜欢做比较,以便更好地理解。例如,应用程序代理是公司的老板,它告诉-向员工类发送消息。当然是从委托调用实例,它只是一个与其他类类似的类。你给他们打电话的顺序和背后的逻辑才是最重要的。正如Rayfleck所说,您可以使用master类而不是App委托,我就是这样做的。
// 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];
}
B *controller = [[B alloc] init];
controller.firstController = A;