我正在使用iCarousel
创建我的老虎机应用,我的iCarousel
包含来自NSDocumentDirectory
的图片,这些图片来自我的ImagePicker
。所以这是我的应用程序的工作方式,当用户按下iCarousel
旋转按钮时。
当它停止时,显示该项目3秒钟,然后删除它。
我的问题是,当我转到另一个视图时,已删除的索引/项目再次出现。即使我转到不同的视图,如何维护我的阵列。删除的索引/项目将不会显示,直到应用程序重新启动,如保存数组。谢谢你的帮助。
//我的数组
- (void)viewDidLoad
{
self.images = [NSMutableArray new];
for(int i = 0; i <= 100; i++)
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *savedImagePath = [documentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"images%d.png", i]];
if([[NSFileManager defaultManager] fileExistsAtPath:savedImagePath]){
[images addObject:[UIImage imageWithContentsOfFile:savedImagePath]];
}
}
}
- (void)viewWillAppear:(BOOL)animated {
spinButton = [UIButton buttonWithType:UIButtonTypeCustom];
[spinButton addTarget:self action:@selector(spin) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:spinButton];
}
- (void) carouselDidEndScrollingAnimation:(iCarousel *)carousel{
[NSTimer scheduledTimerWithTimeInterval:0.56 //this arranges the duration of the scroll
target:self
selector:@selector(deleteItem)
userInfo:nil
repeats:NO];
}
//旋转和删除方法
- (void)spin {
[carousel scrollByNumberOfItems:-35 duration:10.7550f];
}
-(void) deleteItem {
//Removes the object chosen
NSInteger index = carousel.currentItemIndex;
[carousel removeItemAtIndex:index animated:YES];
[images removeObjectAtIndex:index];
}
我需要的是,当删除索引/项目时,即使我转到其他视图也不会暂时显示。仅在应用关闭并再次打开后才会重新启动视图
答案 0 :(得分:1)
您的问题是每次进入视图时都会创建图像NSMutableArray
。
正如@Saleh所说,你应该将数组放在视图控制器之外。要在appDelegate
中按照他的建议执行此操作,请执行以下操作:
在 AppDelegate.h 声明:
@property( strong, nonatomic) NSMutableArray *images;
在 AppDelegate.m :
@synthesize images;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Read the images after the existing code ....
self.images = [NSMutableArray array];
for(int i = 0; i <= 100; i++)
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *savedImagePath = [documentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"images%d.png", i]];
if([[NSFileManager defaultManager] fileExistsAtPath:savedImagePath]){
[images addObject:[UIImage imageWithContentsOfFile:savedImagePath]];
}
}
return YES;
}
然后在 ViewController.m :
中#import "AppDelegate.h"
并更改您的viewDidLoad
方法:
- (void)viewDidLoad
{
[super viewDidLoad];
self.images = ((AppDelegate *)[[UIApplication sharedApplication] delegate]).images;
}
这应该有用。
答案 1 :(得分:0)
使用数组的一个实例,您只需初始化一次。将数组放在appDelegate中,这将使整个应用程序成为singelton。