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;
}
- 나는 LocationByCustomLocation 변수에 뭐가 있는지보고 LocationManager.m에 NSLog를 사용하는 경우
//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];
}
지금, 나는 customLoc에서와 동일한 데이터를 기대. 대신 변수는 여전히 비어있는 것처럼 보입니다.
문제는 내가 LocationManager 클래스 복사본을 만들어서 원래 클래스가 아닌 복사 된 클래스의 LocationByCustomLocation 변수를 채우는 것입니다. 원래 LocationManager 클래스와 대화하는 방법을 알 수 없습니다.
이 문제를 해결할 수있는 몇 가지 방법이 있지만이 방법을 통해 언어에 대한 기본적인 이해를 향상시키는 방법을 알고 싶습니다.
읽어 주셔서 감사합니다.
응용 프로그램 대리인이 아니라 masterController 클래스에서 모든 것을 인스턴스화하고 제어하는 것이 더 좋은 패턴입니다. 일반적으로 전경/배경 변경, 알림 등에 응답하는 것과 같이 앱 위임에서 애플리케이션 수준의 작업 만 수행하면됩니다. – Rayfleck
@danipralea 답장을 보내 주셔서 감사합니다. 이제는 실제로 LocationManager의 두 번째 인스턴스를 할당하고 있음이 분명합니다. 그러나 지금 문제를 이해하는 동안 제안한 솔루션을 이해하지 못합니다. 조금 더 자세히 설명해 주시겠습니까? –
정확히 무엇을 이해하지 못했습니까? 조금 유치한 것 같지만, 나는 더 나은 이해를 위해 비교하기를 좋아합니다. 예를 들어 앱 위임자는 회사의 보스이며 "알립니다"- 직원 (클래스)에게 메시지를 보냅니다. 물론 위임자의 인스턴스를 호출하는 것만으로도 다른 인스턴스와 같은 클래스 일 수 있습니다. 당신이 그들을 부르는 순서와 그 뒤에있는 논리가 중요한 것입니다.Rayfleck이 말했듯이, 당신은 App Delegate 대신 master 클래스를 사용할 수 있습니다. –