0

更新:

我对 UIImageView 进行了子类化,以使一些图像可以通过触摸手势移动。在视图控制器中,我有一个数组保存每个图像视图的初始位置。我的问题是,每当从子类调用此数组时,它都会返回 null。这个想法是检查图像是否处于其原始位置,或者它是否已经被移动过,我已经将代码剥离为 NSLog 发生了什么,但问题仍然存在并且让我发疯。

视图控制器.h

NSMutableArray *originalPositions;
@property (nonatomic, retain) NSMutableArray *originalPositions;
-(void)testLogging;

视图控制器.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 为空:

子类.m

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
ViewController *viewController = [[ViewController alloc] init];
[viewController testLogging];
}
4

2 回答 2

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

这已经是内存泄漏,当您调用 self.originalPositions = bla 时,将保留 'bla'。因此意味着保留计数增加。这意味着您的可变数组的保留计数为 2,并且一旦您的 UIImageView 消失,它将泄漏。

至于其余的,我不知道您的代码有什么问题。我的第一个猜测是你还没有调用 populatePositionsArray,你应该在创建/显示视图时调用它,以便确保在调用 touchesBegan 时填充数组。

或者,您可以在 touchesBegan 中包含一个“if”语句,以检查数组是否存在,否则在继续之前调用 populatePositionsArray 来填充它。

于 2012-05-12T08:42:29.510 回答
0

我通过在填充后将数组写入 plist 文件来解决它。不是很优雅但工作。

谢谢你们的帮助。

于 2012-05-13T09:25:22.257 回答