2012-05-12 3 views
0

Обновлено:Удерживающая матрица в подклассе

У меня есть подклассу 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]; 
} 
+1

Ну, я не понимаю, что должен делать код - 'populatePositionsArray' нужно вызвать первым, но фрагменты, которые вы публикуете, не будут делать это ... вы можете вызвать' populatePositionsArray' в init, возможно – Axel

+0

Аксель прав, вы должны убедиться, что populatePositionsArray, что он называется один раз и с инициализацией класса. – rishi

ответ

0

Я решил это, записав массив в файл plist после его заполнения. Не очень элегантный, но рабочий.

Спасибо за помощь, хотя ребята.

0
self.originalPositions = [[NSMutableArray alloc]init]; 

Это уже происходит утечка памяти при вызове self.originalPositions = бла-то «бла» будет сохранена. Это означает, что счет сохранения увеличивается. Это означает, что ваш изменяемый массив будет иметь счетчик в 2 и что он будет просачиваться после исчезновения вашего UIImageView.

Что касается остальных, я не знаю, что не так с вашим кодом. Мое первое предположение заключалось в том, что вы еще не вызывали populatePositionsArray, вы должны вызывать его всякий раз, когда ваше представление создается/отображается, поэтому вы уверены, что массив заполняется, когда вызывается touchBegan.

В качестве альтернативы вы можете включить оператор «if» в файле touchhesBegan, который проверяет, существует ли массив, и в противном случае вызвать populatePositionsArray, чтобы заполнить его перед продолжением.

+0

populatePositionsArray вызывается в viewdidload родительского представления и он NSLogs массива правильно. Следующее, что я делаю, - это коснуться одного из представлений, которое запускает следующий фрагмент, который я разместил правильно, но массив пуст. Может ли вставка метода init в подкласс сделать разницу? – oskare

+0

Проверьте свой код на дубликаты, вы можете переназначить экземпляр varsomewhere, что означает, что вы просто получите пустой массив. –

+0

. Я обновил вопрос выше, поскольку я выделил проблему. Нет дубликатов. Благодарю. – oskare

Смежные вопросы