更新:
我已经将UIImageView子类化,使一些图像可以通过触摸手势移动。在视图控制器中,我有一个数组,保持每个imageview的初始位置。 我的问题是,无论何时从子类调用它,该数组都会返回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'方法NS正确地记录数组但是如果我从子类调用相同的方法,则NSLogs为null:
Subclass.m
- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
ViewController *viewController = [[ViewController alloc] init];
[viewController testLogging];
}
答案 0 :(得分:0)
self.originalPositions = [[NSMutableArray alloc]init];
这已经是内存泄漏,当你调用self.originalPositions = bla时,将保留'bla'。因此意味着保留计数被提高。这意味着你的可变数组的保留计数为2,并且一旦你的UIImageView消失就会泄漏。
至于其余部分,我不知道您的代码有什么问题。我的第一个猜测是你没有调用populatePositionsArray,你应该在创建/显示视图时调用它,这样你就可以确保在调用touchesBegan时填充数组。
或者你可以在touchesBegan中包含一个'if'语句来检查数组是否存在,否则在继续之前调用populatePositionsArray来填充它。
答案 1 :(得分:0)
我通过在填充后将数组写入plist文件来解决它。不是很优雅,但工作。
感谢你们的帮助。