Обновлено:Удерживающая матрица в подклассе
У меня есть подклассу UIImageView, чтобы сделать некоторые изображения подвижными с помощью жестов касания. В контроллере представления у меня есть массив, содержащий начальную позицию каждого изображения. Моя проблема в том, что этот массив возвращает null всякий раз, когда он вызывается из подкласса. Идея состоит в том, чтобы проверить, находится ли изображение в исходном положении или если оно уже было перенесено раньше, я лишил код только NSLog, что происходит, но проблема остается и меня заводит.
ViewController.h
NSMutableArray *originalPositions;
@property (nonatomic, retain) NSMutableArray *originalPositions;
-(void)testLogging;
ViewController.m
@synthesize originalPositions;
- (void)viewDidLoad {
originalPositions = [[NSMutableArray alloc]init];
}
-(void)drawImages {
for (int i = 0; i < imagesArray.count; i++) {
CGRect frame = CGRectMake(65 * i, 10, 60, 60);
draggableView *dragImage = [[draggableView alloc] initWithFrame:frame];
NSString* imgName = [imagesArray objectAtIndex:i];
[dragImage setImage:[UIImage imageNamed:imgName]];
[dragImage setUserInteractionEnabled:YES];
[self.view addSubview:dragImage];
NSString *originalPositionAsString = NSStringFromCGPoint(dragImage.center);
[originalPositions addObject:originalPositionAsString];
}
}
-(void)testLogging {
NSLog(@"Logging array: %@", originalPositions);
}
-(IBAction)btnClicked {
[self testLogging];
}
При вызове из IBAction (или любым другим способом) в классе, «testLogging'-метод NSLogs массив правильно, но если я вызываю тот же метод из подкласса, он NSLogs null:
Подкласс.m
- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
ViewController *viewController = [[ViewController alloc] init];
[viewController testLogging];
}
Ну, я не понимаю, что должен делать код - 'populatePositionsArray' нужно вызвать первым, но фрагменты, которые вы публикуете, не будут делать это ... вы можете вызвать' populatePositionsArray' в init, возможно – Axel
Аксель прав, вы должны убедиться, что populatePositionsArray, что он называется один раз и с инициализацией класса. – rishi