OSDN Git Service

NSManagedObjectContextを直接使わないようにした
authormasakih <masakih@users.sourceforge.jp>
Sat, 17 Dec 2016 12:35:47 +0000 (21:35 +0900)
committermasakih <masakih@users.sourceforge.jp>
Sat, 17 Dec 2016 12:35:47 +0000 (21:35 +0900)
KCD/HMJSONCommand.h
KCD/HMJSONCommand.m
KCD/HMMemberShipCommand.m
KCD/HMMemberSlotItemCommand.m

index 668ba2d..92e1e5e 100644 (file)
@@ -9,7 +9,7 @@
 #import <Foundation/Foundation.h>
 
 #import "HMAPIResponse.h"
-
+#import "HMCoreDataManager.h"
 
 @interface HMJSONCommand : NSObject
 
@@ -39,6 +39,8 @@
 @property (readonly) NSArray *ignoreKeys;
 @property (readonly) NSString *dataKey;
 
+@property (readonly) Class coreDataManagerClass;    // default is HMServerDataStore.
+
 
 - (void)commitJSONToEntityNamed:(NSString *)entityName;
 
@@ -52,7 +54,7 @@
 - (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;
 
index d7611df..405f02c 100644 (file)
@@ -25,7 +25,7 @@ static NSMutableArray *registeredCommands = nil;
 
 @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;
@@ -143,6 +143,11 @@ NSString *keyByDeletingPrefix(NSString *key)
 {
        return @"id";
 }
+
+- (Class)coreDataManagerClass
+{
+    return [HMServerDataStore class];
+}
 - (void)setValueIfNeeded:(id)value toObject:(id)object forKey:(NSString *)key
 {
        id oldValue = [object valueForKey:key];
@@ -208,7 +213,7 @@ NSString *keyByDeletingPrefix(NSString *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) {
@@ -264,10 +269,10 @@ NSString *keyByDeletingPrefix(NSString *key)
         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];
@@ -278,12 +283,12 @@ NSString *keyByDeletingPrefix(NSString *key)
     
     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];
 }
 
 
@@ -307,7 +312,7 @@ NSString *keyByDeletingPrefix(NSString *key)
 {
        return NO;
 }
-- (void)finishOperating:(NSManagedObjectContext *)moc
+- (void)finishOperating:(HMCoreDataManager *)store
 {
        
 }
index 9e87805..a9df465 100644 (file)
@@ -271,34 +271,26 @@ static BOOL isFewShipUpdateAPI(NSString *api)
        
        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
index 6a17b9a..08d67e3 100644 (file)
        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];
        }
 }