代码之家  ›  专栏  ›  技术社区  ›  RyanCodes

Restkit Cache发布iOS保存更新属性

  •  0
  • RyanCodes  · 技术社区  · 12 年前

    我正在为IOS构建一个利用restkit的应用程序。我想我的缓存区有问题。我为初次启动设置了应用程序,以获取大量数据,并使用restkit将其映射到核心数据中。一切正常,数据显示在表视图中。现在,如果我让应用程序进入后台,然后再次单击该应用程序以继续,我会调用相同的方法来加载数据,但这次我将版本#发送到服务器,以仅获取自上次提取以来更改、添加或删除的对象。这一切都很好,但当我去显示这些对象时,我得到的数据与第一次提取时相同。我相信这可能是缓存问题的解决,但我不知道。帮助是感激的。

    RKObjectManager*对象管理器=[RKObjectManager对象管理器WithBaseURLString:@“http://link.com“]; objectManager.client.requestQueue.showsNetworkActivityIndicatorWhenBusy=是; objectManager.objectStore=[RKManagedObjectStore objectStoreWithStoreFilename:@“34453434.sqlite”]; RKManagedObjectMapping*cliffMapping=[RKManagedObjectMapping mappingForClass:[Cliff class]inManagedObjectStore:objectManager.objectStore];

    cliffMapping.primaryKeyAttribute = @"cliffID";
    cliffMapping.rootKeyPath = @"cliffs";
    [cliffMapping mapKeyPath:@"name" toAttribute:@"name"];
    [cliffMapping mapKeyPath:@"cliffId" toAttribute:@"cliffID"];
    [cliffMapping mapKeyPath:@"description" toAttribute:@"cliffDescription"];
    [cliffMapping mapKeyPath:@"notes" toAttribute:@"notes"];
    [cliffMapping mapKeyPath:@"city" toAttribute:@"city"];
    [cliffMapping mapKeyPath:@"intensity" toAttribute:@"intensity"];
    [cliffMapping mapKeyPath:@"latitude" toAttribute:@"latitude"];
    [cliffMapping mapKeyPath:@"height" toAttribute:@"height"];
    [cliffMapping mapKeyPath:@"longitude" toAttribute:@"longitude"];
    [cliffMapping mapKeyPath:@"zipcode" toAttribute:@"zipcode"];
    [objectManager.mappingProvider setMapping:cliffMapping forKeyPath:@"cliffs"];
    [objectManager.mappingProvider addObjectMapping:cliffMapping];
    
    RKManagedObjectMapping* stateMapping = [RKManagedObjectMapping mappingForClass:[State class] inManagedObjectStore:objectManager.objectStore];
    stateMapping.rootKeyPath = @"States";
    stateMapping.primaryKeyAttribute = @"stateID";
    [stateMapping mapKeyPath:@"stateId" toAttribute:@"stateID"];
    [stateMapping mapKeyPath:@"name" toAttribute:@"name"];
    [stateMapping mapKeyPath:@"version" toAttribute:@"sversion"];
    [stateMapping mapKeyPath:@"cliffAmount" toAttribute:@"cliffAmount"];
    [stateMapping mapRelationship:@"cliffs" withMapping:cliffMapping];
    [objectManager.mappingProvider setMapping:stateMapping forKeyPath:@"States"];
    [objectManager.mappingProvider addObjectMapping:stateMapping];
    [objectManager loadObjectsAtResourcePath:@"/Application/getEverything" usingBlock:^(RKObjectLoader *loader){
        loader.serializationMIMEType = RKMIMETypeJSON;
        loader.resourcePath = @"/Application/getEverything";
        loader.method = RKRequestMethodPOST;
        loader.delegate = self;
        loader.objectMapping = stateMapping;
    }];
    
    1 回复  |  直到 12 年前
        1
  •  1
  •   RyanCodes    11 年前

    您只需要将它保存在对象加载器委托方法中。

    - (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects
    { 
       [[RKObjectManager sharedManager].objectStore.managedObjectContextForCurrentThread      save:nil];
    }