0

我正在使用 制作我的老虎机应用程序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];
}

我需要的是,当索引/项目被删除时,即使我转到其他视图,它也不会暂时显示。只有在应用关闭并再次打开后才会重新启动视图

4

2 回答 2

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;
}

这应该有效。

于 2012-06-25T21:20:13.180 回答
0

使用数组的一个实例,您只初始化一次。将数组放入 appDelegate 中,这将使它成为整个应用程序的单例。

于 2012-06-25T04:50:56.597 回答