需要 reload/recalculate NSArray

Need to reload/recalculate NSArray

希望有人能帮上忙,我已经无计可施了!

基本上我有一个 JSON feed 将数据拉入 NSDictionary 并带有一个附加文件(.h 和 .m),添加一些与当前时间相关的条件字段。我需要每 x 分钟 update/refresh 条件字段,而不需要 reloading/pulling 来自 JSON 提要的数据。相反,我想重新 运行 条件测试并使用最初创建的数据库更新数据库。

有没有人知道如何做到这一点,我到处研究都找不到答案!!

仅供参考,这里是在数据库中设置额外 fields/entity 的条件参数:

//
//  Entity.m
//  tabbed
//
//  Created by administrator on 16.07.12.
//  Copyright (c) 2012 __HappyTimes__. All rights reserved.
//

#import "RestarauntEntity.h"
#import "NSDate+DeviceDate.h"

@implementation RestarauntEntity

@synthesize city = _city;
@synthesize closingTime = _closingTime;
@synthesize description = _description;
@synthesize lattitude = _lattitude;
@synthesize longditude = _longditude;
@synthesize openingState = _openingState;
@synthesize openingTime = _openingTime;
@synthesize phoneNumber = _phoneNumber;
@synthesize thumbnailUrl = _thumbnailUrl;
@synthesize title = _title;
@synthesize website = _website;

- (id)initWithDictionary:(NSMutableDictionary *) dictionary 
{
    self = [super init];
    if (self) {
        _title = [dictionary objectForKey:@"title"];
        _description = [dictionary objectForKey:@"content"]; 
        _thumbnailUrl = [dictionary objectForKey:@"thumbnail"];
        _city = [[[dictionary objectForKey:@"custom_fields"] objectForKey:@"City"] objectAtIndex:0];
        _phoneNumber = [[[dictionary objectForKey:@"custom_fields"] objectForKey:@"Phone Number"] objectAtIndex:0];
        _website = [[[dictionary objectForKey:@"custom_fields"] objectForKey:@"Address"] objectAtIndex:0];


        // get opening/closing time values
        NSString *currentWeekDayName = [NSDate currentDayOfTheWeekInEnglish];        
        NSString *openingTimeForCurentDay = [NSString stringWithFormat:@"%@ Opening Time", currentWeekDayName];
        NSString *closingTimeForCurentDay = [NSString stringWithFormat:@"%@ Closing Time", currentWeekDayName];

        _openingTime = [[[dictionary objectForKey:@"custom_fields"] objectForKey:openingTimeForCurentDay] objectAtIndex:0];
        _closingTime = [[[dictionary objectForKey:@"custom_fields"] objectForKey:closingTimeForCurentDay] objectAtIndex:0];

        // Prepare current day string in format yyyy-MM-dd
        NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
        [timeFormat setDateFormat:@"yyyy-MM-dd "];
        [timeFormat setPMSymbol:@"pm"];
        [timeFormat setAMSymbol:@"am"];

        NSDate *now = [[NSDate alloc] init];
        NSString *currentDay = [timeFormat stringFromDate:now];

        // Find full date for opening and close time
        [timeFormat setDateFormat:@"yyyy-MM-dd hh:mm a"];

        NSDate *openingTimeDate = [timeFormat dateFromString:[currentDay stringByAppendingString:_openingTime]];
        NSDate *closingTimeDate = [timeFormat dateFromString:[currentDay stringByAppendingString:_closingTime]];

        // Find out opening state of the restaraunt
        if(([openingTimeDate compare:now] == NSOrderedAscending) || ([openingTimeDate compare:now] == NSOrderedSame)) {
            if([closingTimeDate compare:now] == NSOrderedDescending)
            {
                _openingState = RestarauntOpeningStateOpen;
            } else {
                _openingState = RestarauntOpeningStateClosed; 
            }
        } else {
            NSDate *nowPlusTwoHours = [now dateByAddingTimeInterval:7200.0];
            if(([openingTimeDate compare:nowPlusTwoHours] == NSOrderedAscending) || ([openingTimeDate compare:nowPlusTwoHours] == NSOrderedSame))
            {
                _openingState = RestarauntOpeningStateWillBeOpenedInTwoHours;
            } else {
                _openingState = RestarauntOpeningStateClosed;
            }
        }

   //     _openingState = RestarauntOpeningStateWillBeOpenedInTwoHours;

        NSArray *lattitudeRecord = [[dictionary objectForKey:@"custom_fields"] objectForKey:@"Lattitude"]; 
        _lattitude = [[lattitudeRecord objectAtIndex:0] doubleValue];

        NSArray *longditudeRecord = [[dictionary objectForKey:@"custom_fields"] objectForKey:@"Longditude"]; 
        _longditude = [[longditudeRecord objectAtIndex:0] doubleValue];
    }

    //[setValue:@"RestarauntOpeningStateOpen" forKey:@"_openingState"];

  //  _openingState setValue:@"RestarauntOpeningStateOpen" forKeyPath:RestarauntOpeningState;

    return self;
}

//-(void)setValue:(id)value forKeyPath:(NSString *)keyPath{
//    _openingState = RestarauntOpeningStateOpen;
//}

//-(void)setValue:(id)value forKeyPath:(NSString *)keyPath{
//    _openingState = RestarauntOpeningStateOpen;
//}

@end

您不应该存储打开状态。这应该是一个计算 属性。 创建请求时 returns 这个值的方法:

- (OpeningState)openingState {
    OpeningState _openingState;

    NSDate *openingTimeDate = [timeFormat dateFromString:[currentDay stringByAppendingString:_openingTime]];
    NSDate *closingTimeDate = [timeFormat dateFromString:[currentDay stringByAppendingString:_closingTime]];

    // Find out opening state of the restaurant
    if(([openingTimeDate compare:now] == NSOrderedAscending) || ([openingTimeDate compare:now] == NSOrderedSame)) {
        if([closingTimeDate compare:now] == NSOrderedDescending) {
                _openingState = RestarauntOpeningStateOpen;
            } else {
                _openingState = RestarauntOpeningStateClosed; 
            }
        } else {
            NSDate *nowPlusTwoHours = [now dateByAddingTimeInterval:7200.0];
            if(([openingTimeDate compare:nowPlusTwoHours] == NSOrderedAscending) || ([openingTimeDate compare:nowPlusTwoHours] == NSOrderedSame))
            {
                _openingState = RestarauntOpeningStateWillBeOpenedInTwoHours;
            } else {
                _openingState = RestarauntOpeningStateClosed;
            }
        }
   return _openingState
}