diff --git a/Magical Record.xcodeproj/project.pbxproj b/Magical Record.xcodeproj/project.pbxproj index afa8b7587..c42b9f03e 100644 --- a/Magical Record.xcodeproj/project.pbxproj +++ b/Magical Record.xcodeproj/project.pbxproj @@ -13,8 +13,6 @@ C7005F1714140FB60061B9F4 /* NSAttributeDescription+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = C7005F1514140FB60061B9F4 /* NSAttributeDescription+MagicalDataImport.m */; }; C7005F1A14140FD30061B9F4 /* NSRelationshipDescription+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = C7005F1914140FD30061B9F4 /* NSRelationshipDescription+MagicalDataImport.m */; }; C7005F1B14140FD30061B9F4 /* NSRelationshipDescription+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = C7005F1914140FD30061B9F4 /* NSRelationshipDescription+MagicalDataImport.m */; }; - C7005F1E1414100F0061B9F4 /* NSDictionary+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = C7005F1D1414100F0061B9F4 /* NSDictionary+MagicalDataImport.m */; }; - C7005F1F1414100F0061B9F4 /* NSDictionary+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = C7005F1D1414100F0061B9F4 /* NSDictionary+MagicalDataImport.m */; }; C7005F2214153A060061B9F4 /* NSEntityDescription+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = C7005F2114153A060061B9F4 /* NSEntityDescription+MagicalDataImport.m */; }; C7005F2314153A060061B9F4 /* NSEntityDescription+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = C7005F2114153A060061B9F4 /* NSEntityDescription+MagicalDataImport.m */; }; C70B6E7113D0F62500709450 /* NSPersisentStoreHelperTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C70B6E7013D0F62500709450 /* NSPersisentStoreHelperTests.m */; }; @@ -127,6 +125,8 @@ C7E37A78141577B800CE9BF5 /* libOCMock.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C721C83B13D0C6390097AB6F /* libOCMock.a */; }; C7E37A7C14157BFE00CE9BF5 /* libOCMock.a in CopyFiles */ = {isa = PBXBuildFile; fileRef = C721C83B13D0C6390097AB6F /* libOCMock.a */; }; C7E736DF1402FE64005657C9 /* SingleEntityWithNoRelationships.json in Resources */ = {isa = PBXBuildFile; fileRef = C7E736DE1402FE64005657C9 /* SingleEntityWithNoRelationships.json */; }; + C7F5EEB2148DC76700964607 /* NSObject+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = C7F5EEB1148DC76700964607 /* NSObject+MagicalDataImport.m */; }; + C7F5EEB3148DC76700964607 /* NSObject+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = C7F5EEB1148DC76700964607 /* NSObject+MagicalDataImport.m */; }; /* End PBXBuildFile section */ /* Begin PBXBuildRule section */ @@ -184,8 +184,6 @@ C7005F1514140FB60061B9F4 /* NSAttributeDescription+MagicalDataImport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSAttributeDescription+MagicalDataImport.m"; path = "DataImport/NSAttributeDescription+MagicalDataImport.m"; sourceTree = ""; }; C7005F1814140FD30061B9F4 /* NSRelationshipDescription+MagicalDataImport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSRelationshipDescription+MagicalDataImport.h"; path = "DataImport/NSRelationshipDescription+MagicalDataImport.h"; sourceTree = ""; }; C7005F1914140FD30061B9F4 /* NSRelationshipDescription+MagicalDataImport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSRelationshipDescription+MagicalDataImport.m"; path = "DataImport/NSRelationshipDescription+MagicalDataImport.m"; sourceTree = ""; }; - C7005F1C1414100F0061B9F4 /* NSDictionary+MagicalDataImport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+MagicalDataImport.h"; path = "DataImport/NSDictionary+MagicalDataImport.h"; sourceTree = ""; }; - C7005F1D1414100F0061B9F4 /* NSDictionary+MagicalDataImport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+MagicalDataImport.m"; path = "DataImport/NSDictionary+MagicalDataImport.m"; sourceTree = ""; }; C7005F2014153A060061B9F4 /* NSEntityDescription+MagicalDataImport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSEntityDescription+MagicalDataImport.h"; path = "DataImport/NSEntityDescription+MagicalDataImport.h"; sourceTree = ""; }; C7005F2114153A060061B9F4 /* NSEntityDescription+MagicalDataImport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSEntityDescription+MagicalDataImport.m"; path = "DataImport/NSEntityDescription+MagicalDataImport.m"; sourceTree = ""; }; C70B6E6F13D0F62500709450 /* NSPersisentStoreHelperTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSPersisentStoreHelperTests.h; path = "Unit Tests/NSPersisentStoreHelperTests.h"; sourceTree = ""; }; @@ -346,6 +344,8 @@ C7C9A38913F4524B002C5B0C /* SingleEntityRelatedToMappedEntityUsingMappedPrimaryKey.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SingleEntityRelatedToMappedEntityUsingMappedPrimaryKey.m; sourceTree = ""; }; C7C9A38C13F45438002C5B0C /* ImportSingleEntityRelatedToMappedEntityUsingMappedPrimaryKeyTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ImportSingleEntityRelatedToMappedEntityUsingMappedPrimaryKeyTests.m; path = "Unit Tests/ImportSingleEntityRelatedToMappedEntityUsingMappedPrimaryKeyTests.m"; sourceTree = ""; }; C7E736DE1402FE64005657C9 /* SingleEntityWithNoRelationships.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = SingleEntityWithNoRelationships.json; path = "Unit Tests/Fixtures/SingleEntityWithNoRelationships.json"; sourceTree = ""; }; + C7F5EEB0148DC76700964607 /* NSObject+MagicalDataImport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSObject+MagicalDataImport.h"; path = "DataImport/NSObject+MagicalDataImport.h"; sourceTree = ""; }; + C7F5EEB1148DC76700964607 /* NSObject+MagicalDataImport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MagicalDataImport.m"; path = "DataImport/NSObject+MagicalDataImport.m"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -380,6 +380,8 @@ C7005F0E14140F690061B9F4 /* Data Import */ = { isa = PBXGroup; children = ( + C7F5EEB0148DC76700964607 /* NSObject+MagicalDataImport.h */, + C7F5EEB1148DC76700964607 /* NSObject+MagicalDataImport.m */, C75A4E7113D0D88D00790CEB /* NSManagedObject+MagicalDataImport.h */, C75A4E7213D0D88D00790CEB /* NSManagedObject+MagicalDataImport.m */, C7005F1014140F9B0061B9F4 /* NSNumber+MagicalDataImport.h */, @@ -388,8 +390,6 @@ C7005F1514140FB60061B9F4 /* NSAttributeDescription+MagicalDataImport.m */, C7005F1814140FD30061B9F4 /* NSRelationshipDescription+MagicalDataImport.h */, C7005F1914140FD30061B9F4 /* NSRelationshipDescription+MagicalDataImport.m */, - C7005F1C1414100F0061B9F4 /* NSDictionary+MagicalDataImport.h */, - C7005F1D1414100F0061B9F4 /* NSDictionary+MagicalDataImport.m */, C7005F2014153A060061B9F4 /* NSEntityDescription+MagicalDataImport.h */, C7005F2114153A060061B9F4 /* NSEntityDescription+MagicalDataImport.m */, ); @@ -965,8 +965,8 @@ C7005F1214140F9B0061B9F4 /* NSNumber+MagicalDataImport.m in Sources */, C7005F1614140FB60061B9F4 /* NSAttributeDescription+MagicalDataImport.m in Sources */, C7005F1A14140FD30061B9F4 /* NSRelationshipDescription+MagicalDataImport.m in Sources */, - C7005F1E1414100F0061B9F4 /* NSDictionary+MagicalDataImport.m in Sources */, C7005F2214153A060061B9F4 /* NSEntityDescription+MagicalDataImport.m in Sources */, + C7F5EEB2148DC76700964607 /* NSObject+MagicalDataImport.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1026,8 +1026,8 @@ C7005F1314140F9B0061B9F4 /* NSNumber+MagicalDataImport.m in Sources */, C7005F1714140FB60061B9F4 /* NSAttributeDescription+MagicalDataImport.m in Sources */, C7005F1B14140FD30061B9F4 /* NSRelationshipDescription+MagicalDataImport.m in Sources */, - C7005F1F1414100F0061B9F4 /* NSDictionary+MagicalDataImport.m in Sources */, C7005F2314153A060061B9F4 /* NSEntityDescription+MagicalDataImport.m in Sources */, + C7F5EEB3148DC76700964607 /* NSObject+MagicalDataImport.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Source/Categories/NSPersistentStoreCoordinator+MagicalRecord.h b/Source/Categories/NSPersistentStoreCoordinator+MagicalRecord.h index a12226945..ea0bbe01c 100644 --- a/Source/Categories/NSPersistentStoreCoordinator+MagicalRecord.h +++ b/Source/Categories/NSPersistentStoreCoordinator+MagicalRecord.h @@ -22,15 +22,9 @@ extern NSString * const kMagicalRecordPSCDidCompleteiCloudSetupNotification; + (NSPersistentStoreCoordinator *) MR_coordinatorWithSqliteStoreNamed:(NSString *)storeFileName; + (NSPersistentStoreCoordinator *) MR_coordinatorWithAutoMigratingSqliteStoreNamed:(NSString *)storeFileName; + (NSPersistentStoreCoordinator *) MR_coordinatorWithPersitentStore:(NSPersistentStore *)persistentStore; -+ (NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(NSString *)containerID - contentNameKey:(NSString *)contentNameKey - localStoreNamed:(NSString *)localStoreName - cloudStorePathComponent:(NSString *)subPathComponent; -+ (NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(NSString *)containerID - contentNameKey:(NSString *)contentNameKey - localStoreNamed:(NSString *)localStoreName - cloudStorePathComponent:(NSString *)subPathComponent - completion:(void(^)(void))completionHandler; ++ (NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent; + ++ (NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent completion:(void(^)(void))completionHandler; - (NSPersistentStore *) MR_addInMemoryStore; - (NSPersistentStore *) MR_addAutoMigratingSqliteStoreNamed:(NSString *) storeFileName; diff --git a/Source/MagicalRecordShorthand.h b/Source/MagicalRecordShorthand.h index 117ed1c14..2a72709aa 100644 --- a/Source/MagicalRecordShorthand.h +++ b/Source/MagicalRecordShorthand.h @@ -8,12 +8,12 @@ @interface NSManagedObject (NSManagedObject_DataImportShortHand) - (void) importValuesForKeysWithDictionary:(id)objectData; - (void) updateValuesForKeysWithDictionary:(id)objectData; -+ (id) importFromDictionary:(NSDictionary *)data; -+ (id) importFromDictionary:(NSDictionary *)data inContext:(NSManagedObjectContext *)context; ++ (id) importFromDictionary:(id)data; ++ (id) importFromDictionary:(id)data inContext:(NSManagedObjectContext *)context; + (NSArray *) importFromArray:(NSArray *)listOfObjectData; + (NSArray *) importFromArray:(NSArray *)listOfObjectData inContext:(NSManagedObjectContext *)context; -+ (id) updateFromDictionary:(NSDictionary *)objectData; -+ (id) updateFromDictionary:(NSDictionary *)objectData inContext:(NSManagedObjectContext *)context; ++ (id) updateFromDictionary:(id)objectData; ++ (id) updateFromDictionary:(id)objectData inContext:(NSManagedObjectContext *)context; @end @interface NSManagedObject (MagicalRecordShortHand) + (NSUInteger) defaultBatchSize; @@ -89,7 +89,6 @@ + (NSArray *) findByAttribute:(NSString *)attribute withValue:(id)searchValue andOrderBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context; - (id) inContext:(NSManagedObjectContext *)otherContext; - (id) inThreadContext; -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR + (void) performFetch:(NSFetchedResultsController *)controller; + (NSFetchedResultsController *) fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath delegate:(id)delegate; + (NSFetchedResultsController *) fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath delegate:(id)delegate inContext:(NSManagedObjectContext *)context; @@ -97,12 +96,13 @@ + (NSFetchedResultsController *) fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context; + (NSFetchedResultsController *) fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending delegate:(id)delegate; + (NSFetchedResultsController *) fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending delegate:(id)delegate inContext:(NSManagedObjectContext *)context; -#endif @end @interface NSManagedObjectContext (MagicalRecordShortHand) - (void) observeContext:(NSManagedObjectContext *)otherContext; - (void) stopObservingContext:(NSManagedObjectContext *)otherContext; - (void) observeContextOnMainThread:(NSManagedObjectContext *)otherContext; +- (void) observeiCloudChangesInCoordinator:(NSPersistentStoreCoordinator *)coordinator; +- (void) stopObservingiCloudChangesInCoordinator:(NSPersistentStoreCoordinator *)coordinator; - (BOOL) save; - (BOOL) saveWithErrorHandler:(void (^)(NSError *))errorCallback; - (BOOL) saveOnMainThread; @@ -131,6 +131,7 @@ + (NSPersistentStore *) defaultPersistentStore; + (void) setDefaultPersistentStore:(NSPersistentStore *) store; + (NSURL *) urlForStoreName:(NSString *)storeFileName; ++ (NSURL *) cloudURLForUbiqutiousContainer:(NSString *)bucketName; @end @interface NSPersistentStoreCoordinator (MagicalRecordShortHand) + (NSPersistentStoreCoordinator *) defaultStoreCoordinator; @@ -138,9 +139,15 @@ + (NSPersistentStoreCoordinator *) coordinatorWithInMemoryStore; + (NSPersistentStoreCoordinator *) newPersistentStoreCoordinator NS_RETURNS_RETAINED; + (NSPersistentStoreCoordinator *) coordinatorWithSqliteStoreNamed:(NSString *)storeFileName; -+ (NSPersistentStoreCoordinator *) coordinatorWithAutoMigratingSqliteStoreNamed:(NSString *) storeFileName; ++ (NSPersistentStoreCoordinator *) coordinatorWithAutoMigratingSqliteStoreNamed:(NSString *)storeFileName; + (NSPersistentStoreCoordinator *) coordinatorWithPersitentStore:(NSPersistentStore *)persistentStore; ++ (NSPersistentStoreCoordinator *) coordinatorWithiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent; ++ (NSPersistentStoreCoordinator *) coordinatorWithiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent completion:(void(^)(void))completionHandler; - (NSPersistentStore *) addInMemoryStore; +- (NSPersistentStore *) addAutoMigratingSqliteStoreNamed:(NSString *) storeFileName; +- (NSPersistentStore *) addSqliteStoreNamed:(id)storeFileName withOptions:(__autoreleasing NSDictionary *)options; +- (void) addiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent; +- (void) addiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent completion:(void(^)(void))completionBlock; @end #endif diff --git a/Unit Tests/Fixtures/iOS/TestEntities/_SingleEntityRelatedToManyMappedEntitiesUsingMappedPrimaryKey.m b/Unit Tests/Fixtures/iOS/TestEntities/_SingleEntityRelatedToManyMappedEntitiesUsingMappedPrimaryKey.m index f2f174974..87547dc77 100644 --- a/Unit Tests/Fixtures/iOS/TestEntities/_SingleEntityRelatedToManyMappedEntitiesUsingMappedPrimaryKey.m +++ b/Unit Tests/Fixtures/iOS/TestEntities/_SingleEntityRelatedToManyMappedEntitiesUsingMappedPrimaryKey.m @@ -71,7 +71,9 @@ - (void)setPrimitiveTestPrimaryKeyValue:(short)value_ { - (NSMutableSet*)mappedEntitiesSet { [self willAccessValueForKey:@"mappedEntities"]; + NSMutableSet *result = (NSMutableSet*)[self mutableSetValueForKey:@"mappedEntities"]; + [self didAccessValueForKey:@"mappedEntities"]; return result; } diff --git a/Unit Tests/Fixtures/iOS/TestEntities/_SingleRelatedEntity.m b/Unit Tests/Fixtures/iOS/TestEntities/_SingleRelatedEntity.m index 6a2615081..b1b22175d 100644 --- a/Unit Tests/Fixtures/iOS/TestEntities/_SingleRelatedEntity.m +++ b/Unit Tests/Fixtures/iOS/TestEntities/_SingleRelatedEntity.m @@ -48,7 +48,9 @@ + (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key { - (NSMutableSet*)testAbstractToManyRelationshipSet { [self willAccessValueForKey:@"testAbstractToManyRelationship"]; + NSMutableSet *result = (NSMutableSet*)[self mutableSetValueForKey:@"testAbstractToManyRelationship"]; + [self didAccessValueForKey:@"testAbstractToManyRelationship"]; return result; } @@ -63,7 +65,9 @@ - (NSMutableSet*)testAbstractToManyRelationshipSet { - (NSMutableSet*)testConcreteToManyRelationshipSet { [self willAccessValueForKey:@"testConcreteToManyRelationship"]; + NSMutableSet *result = (NSMutableSet*)[self mutableSetValueForKey:@"testConcreteToManyRelationship"]; + [self didAccessValueForKey:@"testConcreteToManyRelationship"]; return result; }