2016-06-09 4 views
1

Привет, я работал с Photos.framework, но теперь я застрял с предикатным сравнением класса в документах. Я вижу, что мы можем использовать startDate для использования в предикате. Так что мой код этоПредикат PHFetchOptions с NSDate сравнить

@interface ViewController() 
{ 
    NSMutableArray * moments; 
} 



@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    moments = [NSMutableArray array]; 

    if([PHPhotoLibrary authorizationStatus] == PHAuthorizationStatusNotDetermined) 
    { 
     [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { 
      [self loadCollections]; 
     }]; 
    }else 
    { 
     [self loadCollections]; 
    } 

} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [self loadCollections]; 
} 


- (NSDate*)dateAddingDays:(NSInteger)days ToDate:(NSDate*)argDate 
{ 
    NSCalendar * gregorian = [NSCalendar currentCalendar]; 

    NSDateFormatter * formatter = [[NSDateFormatter alloc]init]; 
    [formatter setDateFormat:@"dd.MM.yyyy"]; 
    NSString * dateString = [formatter stringFromDate:argDate]; 
    NSDate * toWorkDate = [formatter dateFromString:dateString]; 

    NSDateComponents *comps = [[NSDateComponents alloc] init]; 
    [comps setDay:days]; 
    NSDate *date = [gregorian dateByAddingComponents:comps toDate:toWorkDate options:0]; 
    NSLog(@"%@",[formatter stringFromDate:date]); 
    return date; 
} 

- (void)loadCollections 
{ 
    PHFetchOptions * options = [[PHFetchOptions alloc]init]; 

    options.predicate = [NSComparisonPredicate predicateWithFormat:@"startDate > CAST(%d,\"NSDate\")",[self dateAddingDays2:-1 ToDate:[NSDate date]].timeIntervalSince1970]; 
    PHFetchResult * result = [PHAssetCollection fetchMomentsWithOptions:options]; 

    if(result != nil) 
    { 
     NSLog(@"%i",result.count); 
     for (int i = 0; i < result.count; i++) { 
      NSLog(@"%@",[result objectAtIndex:i]); 
      [moments addObject:[result objectAtIndex:i]]; 
     } 
    } 

} 

Так что моя проблема заключается в следующем, мне нужно принести Fotos от одного дня назад, я могу сделать эту работу !! любая помощь будет оценена.

+0

'options.predicate = [NSPredicate predicateWithFormat: @" startDate>% @ ", [self dateByAddingsDays: -1 ToDate: [NSDate date]]]'? Но dateAddingDays: ToDate: 'странно. Вы не должны этого делать. Не с 'NSDateFormatter' anyways (и' ToDate: 'должно быть' toDate: '(начало нижнего регистра) – Larme

+0

Спасибо, это отлично работает! Y также измените мой [self dateByAddingsDays: -1 ToDate: [NSDate date]] –

ответ

2

Это ответ, в основном я заменил

- (NSDate*)dateAddingDays:(NSInteger)days ToDate:(NSDate*)argDate 
{ 
    NSCalendar * gregorian = [NSCalendar currentCalendar]; 

    NSDateFormatter * formatter = [[NSDateFormatter alloc]init]; 
    [formatter setDateFormat:@"dd.MM.yyyy"]; 
    NSString * dateString = [formatter stringFromDate:argDate]; 
    NSDate * toWorkDate = [formatter dateFromString:dateString]; 

    NSDateComponents *comps = [[NSDateComponents alloc] init]; 
    [comps setDay:days]; 
    NSDate *date = [gregorian dateByAddingComponents:comps toDate:toWorkDate options:0]; 
    NSLog(@"%@",[formatter stringFromDate:date]); 
    return date; 
} 

по

- (NSDate*)yesterday 
{ 
    NSCalendar * gregorian = [NSCalendar currentCalendar]; 
    return [gregorian startOfDayForDate:[gregorian dateByAddingUnit:NSCalendarUnitDay value:-1 toDate:[NSDate date] options:NSCalendarWrapComponents]]; 
} 

, а также заменить этот

options.predicate = [NSComparisonPredicate predicateWithFormat:@"startDate > CAST(%d,\"NSDate\")",[self dateAddingDays2:-1 ToDate:[NSDate date]].timeIntervalSince1970]; 

этим

options.predicate = [NSComparisonPredicate predicateWithFormat:@"(startDate > %@)",[self yesterday]]; 

и теперь работает !!! спасибо @Larme