NSMutableArray索引删除

时间:2012-06-25 03:45:56

标签: iphone ios xcode

我正在使用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];
}

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

2 个答案:

答案 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。