Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何让一个类更改另一个类中的变量(或对象)_Iphone_Objective C_Class - Fatal编程技术网

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

Iphone 如何让一个类更改另一个类中的变量(或对象),iphone,objective-c,class,Iphone,Objective C,Class,我对Objective-C编程相当陌生。虽然我已经找到了自己的方法,但现在有一个问题我无法解决,这要么是因为我犯了一个错误,要么是因为我对类有一个基本的误解 本质上,我希望一个类更改另一个类中的变量或对象。以下是我的代码: // LocationManager.h #import <Foundation/Foundation.h> #import <CoreLocation/CoreLocation.h> @interface LocationManager : NSO

我对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中使用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;