#import <Foundation/Foundation.h>
#import "HMAPIResponse.h"
-
+#import "HMCoreDataManager.h"
@interface HMJSONCommand : NSObject
@property (readonly) NSArray *ignoreKeys;
@property (readonly) NSString *dataKey;
+@property (readonly) Class coreDataManagerClass; // default is HMServerDataStore.
+
- (void)commitJSONToEntityNamed:(NSString *)entityName;
- (BOOL)handleExtraValue:(id)value forKey:(NSString *)key toObject:(NSManagedObject *)object;
// データ登録後の処理を行う
-- (void)finishOperating:(NSManagedObjectContext *)moc;
+- (void)finishOperating:(HMCoreDataManager *)store;
- (void)setValueIfNeeded:(id)value toObject:(id)object forKey:(NSString *)key;
@interface HMJSONCommand ()
-typedef NSManagedObject *(^HMObjectSearcher)(NSString *entityName, HMServerDataStore *store, NSArray *objects, NSDictionary *element);
+typedef NSManagedObject *(^HMObjectSearcher)(NSString *entityName, HMCoreDataManager *store, NSArray *objects, NSDictionary *element);
@property (nonatomic, copy) NSString *argumentsString;
{
return @"id";
}
+
+- (Class)coreDataManagerClass
+{
+ return [HMServerDataStore class];
+}
- (void)setValueIfNeeded:(id)value toObject:(id)object forKey:(NSString *)key
{
id oldValue = [object valueForKey:key];
- (HMObjectSearcher)objectSearcher
{
__weak HMJSONCommand *weakSelf = self;
- HMObjectSearcher p = ^NSManagedObject *(NSString *entityName, HMServerDataStore *store, NSArray *objects, NSDictionary *element) {
+ HMObjectSearcher p = ^NSManagedObject *(NSString *entityName, HMCoreDataManager *store, NSArray *objects, NSDictionary *element) {
NSRange range = NSMakeRange(0, objects.count);
NSArray<NSString *> *keys = weakSelf.cmpositPrimaryKeys;
if(!keys) {
return;
}
- HMServerDataStore *serverDataStore = [HMServerDataStore oneTimeEditor];
+ HMCoreDataManager *store = [self.coreDataManagerClass oneTimeEditor];
NSError *error = nil;
- NSArray *objects = [serverDataStore objectsWithEntityName:entityName
+ NSArray *objects = [store objectsWithEntityName:entityName
sortDescriptors:self.sortDescriptors
predicate:nil
error:&error];
HMObjectSearcher objectSearcher = self.objectSearcher;
for(NSDictionary *element in api_data) {
- NSManagedObject *object = objectSearcher(entityName, serverDataStore, objects, element);
+ NSManagedObject *object = objectSearcher(entityName, store, objects, element);
if(object) {
[self registerElement:element toObject:object];
}
}
- [self finishOperating:serverDataStore.managedObjectContext];
+ [self finishOperating:store];
}
{
return NO;
}
-- (void)finishOperating:(NSManagedObjectContext *)moc
+- (void)finishOperating:(HMCoreDataManager *)store
{
}
return NO;
}
-- (void)finishOperating:(NSManagedObjectContext *)moc
+- (void)finishOperating:(HMCoreDataManager *)store
{
// ship3の時は1隻のみのデータアップデートがあるため
// getshipの時は取得した1隻のみのデータのため
if(isFewShipUpdateAPI(self.api)) {
return;
}
-
- NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Ship"];
- NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT id IN %@", self.ids];
- [request setPredicate:predicate];
-
- NSError *error = nil;
- NSArray *array = [moc executeFetchRequest:request error:&error];
- if(error) {
- NSLog(@"HOGEEEEE");
+
+ NSError *error = nil;
+ NSArray *array = [store objectsWithEntityName:@"Ship"
+ error:&error
+ predicateFormat:@"NOT id IN %@", self.ids];
+ if(error) {
+ NSLog(@"HOGEEEEE");
return;
}
for(id obj in array) {
- [moc deleteObject:obj];
+ [store deleteObject:obj];
}
-
-// if(array.count != 0) {
-// NSLog(@"%ld Objects deleted.", array.count);
-// }
-//
-// NSLog(@"updated count -> %ld\ndeleted -> %@", [[moc updatedObjects] count], [moc deletedObjects]);
}
@end
return NO;
}
-- (void)finishOperating:(NSManagedObjectContext *)moc
+- (void)finishOperating:(HMCoreDataManager *)store
{
// getshipの時は取得した艦娘の装備のみのデータのため
if([self.api isEqualToString:@"/kcsapi/api_req_kousyou/getship"]) {
return;
}
-
- NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SlotItem"];
- NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT id IN %@", self.ids];
- [request setPredicate:predicate];
-
+
NSError *error = nil;
- NSArray *array = [moc executeFetchRequest:request error:&error];
+ NSArray *array = [store objectsWithEntityName:@"SlotItem"
+ error:&error
+ predicateFormat:@"NOT id IN %@", self.ids];
if(error) {
NSLog(@"HOGEEEEE");
return;
}
for(id obj in array) {
- [moc deleteObject:obj];
+ [store deleteObject:obj];
}
}