过滤json数据并将结果数据重新加载到myTableView中

时间:2014-02-02 22:32:03

标签: objective-c json uibutton nspredicate xcode4.6

当我按下今天的按钮时,我试图将今天日期匹配的事件(数据)(来自json文件)加载到我的tableView中,然后只有当前日期的数据将被加载到那里,当按下将来的按钮时以后的日期将被加载,我在这里遇到的唯一问题是,当我运行我的程序时,当我按下这些UI按钮时,实际上没有任何事情发生,我得到了所有事件,无论他们的日期如何,甚至没有点击任何UIButton,你可以看下面我的一些代码,如果有人能够弄清楚那里有什么问题并且因为我不确定如何使用谓词来过滤数据,这将是很好的:

@property (strong, nonatomic) NSArray *dateEvents;

@end


@implementation HomeViewController {
 NSArray *_events;
 NSArray *_dateEvents;


 }



- (IBAction)upcomingEvents:(id)sender {


NSDate *currDate = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"dd-MM-YYYY"];
NSString *dateString = [dateFormatter stringFromDate:currDate];
NSLog(@"mama"); 

_dateEvents = [_events filteredArrayUsingPredicate:[NSPredicate   predicateWithBlock:^BOOL(Events * event, NSDictionary *bindings){

    return [event.date isEqualToString:dateString];
    }]];
         self.myTableView.dataSource = self;


         [self.myTableView reloadData];
         NSLog(@"yes");

  }

谢谢,

1 个答案:

答案 0 :(得分:0)

我不确定这会肯定是帮助,因为我看不到足够的代码所以确定这是你的问题,但你可能会发现将所有日期转换为NSDate很有用对象(以便您可以确定问题不是字符串实际上不相等),然后在NSDate上使用此类别方法检查当天是否是当天:

的NSDate + Extensions.m:

static NSCalendar* ___calendar;

@implementation NSDate (Extensions)

    - (BOOL)isSameDay:(NSDate*)date
{
    NSCalendar* calendar = [NSCalendar currentCalendar];

    unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
    NSDateComponents* comp1 = [calendar components:unitFlags fromDate:date];
    NSDateComponents* comp2 = [calendar components:unitFlags fromDate:self];

    return [comp1 day]   == [comp2 day] &&
    [comp1 month] == [comp2 month] &&
    [comp1 year]  == [comp2 year];
}

-(NSCalendar*)currentCalendar
{
    if(___calendar == nil)
    {
        ___calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    }

    return ___calendar;
}

@end

的NSDate + Extensions.h

@interface NSDate (Extensions)

- (BOOL)isSameDay:(NSDate*)date;

@end