对具有 NSData 数组的 NSArray 进行排序

Sort NSArray having NSData array

我有这个 nsarray,其中包含图像数据,图像在数组中动态设置,但我想过滤数据,如果有任何 nil nsdata 我不希望它在我的 nsarray 中,我该如何对这个数组进行排序。这是我的代码。

NSData* imageData = [[NSUserDefaults standardUserDefaults] objectForKey:@"profileImg"];
    NSData* imageData1 = [[NSUserDefaults standardUserDefaults] objectForKey:@"profileImg1"];
    NSData* imageData2 = [[NSUserDefaults standardUserDefaults] objectForKey:@"profileImg2"];
    NSData* imageData3 = [[NSUserDefaults standardUserDefaults] objectForKey:@"profileImg3"];
    NSData* imageData4 = [[NSUserDefaults standardUserDefaults] objectForKey:@"profileImg4"];
    NSData* imageData5 = [[NSUserDefaults standardUserDefaults] objectForKey:@"profileImg5"];




    self.pageImages = [NSArray arrayWithObjects:
                                           [UIImage imageWithData:imageData],
                                           [UIImage imageWithData:imageData1],
                                           [UIImage imageWithData:imageData2],
                                           [UIImage imageWithData:imageData3],
                                           [UIImage imageWithData:imageData4],
                                           [UIImage imageWithData:imageData5],nil];

可以直接查看那个索引处的对象是否为nil

NSMutableArray * finalArray = [[NSMutableArray alloc] init];
for (int i = 0; i< pageImages.count; i++) {
    if (pageImages[i]){
        UIImage * temp = [pageImages objectAtIndex:i];
        [finalArray addObject:temp];
    }
}

我会采取完全不同的方法。问题是 arrayWithObjects: 在遇到 nil 时停止。例如,如果 imageData1nil,您的数组将只有一个图像 - imageData.

更好的方法是检查每个 nil。仅添加非零图像。

NSArray *keys = @[ @"profileImg", @"profileImg1", @"profileImg2", @"profileImg3", @"profileImg4", @"profileImg5" ];
NSMutableArray *images = [NSMutableArray array];
for (NSString *key in keys) {
    NSData* imageData = [[NSUserDefaults standardUserDefaults] objectForKey:key];
    if (imageData) {
        UIImage *image = [UIImage imageWithData:imageData];
        if (image) {
            [images addObject:image];
        }
    }
}

self.pageImages = [images copy];