Я хочу проверить, есть ли данные в iCloud, если их нет, выложите на него новые данные и заполните его. если есть данные, там ничего не делать. также, если он может работать с версиями.iCloud, Core Data и дубликаты и как занести исходные данные?
У меня есть способ сделать это без включения iCloud, но я действительно хочу интегрировать iCloud в свое приложение. На данный момент я получаю дубликаты, когда когда-либо меняю версию приложения, потому что тогда он запускает код для нового управления версиями.
вот как я делаю это без iCloud.
Итак, мой вопрос: как проверить, есть ли какие-либо данные в iCloud, и если это никогда не будет использовано. если он старше, перезапишите его или что-то в этом роде. просто способ засеять мои данные, когда когда-либо делаю изменения в plist в hovedmenu и использую это.
FYI Я использованияКонтактная MagicalRecord, но я могу и правильно будет использовать стандартный код ядра данных для заполнения для его
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
if (![userDefaults valueForKey:@"version"])
{
[Hovedmenu MR_truncateAll];
[self hovedMenu];
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];
NSLog(@"running code");
// Adding version number to NSUserDefaults for first version:
[userDefaults setFloat:[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue] forKey:@"version"];
}
if ([[NSUserDefaults standardUserDefaults] floatForKey:@"version"] == [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue])
{
/// Same Version so dont run the function
}
else
{
[Hovedmenu MR_truncateAll];
[self hovedMenu];
NSLog(@"running code agian");
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];
// Update version number to NSUserDefaults for other versions:
[userDefaults setFloat:[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue] forKey:@"version"];
}
NSLog(@"%@", [NSString stringWithFormat:@"Version %@",[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]]);
-(void)hovedMenu{
NSManagedObjectModel *mom = [NSManagedObjectModel MR_defaultManagedObjectModel];
NSDictionary *attrs = [[[mom entitiesByName] objectForKey:@"Hovedmenu"] attributesByName];
NSArray *keyedValues = [[NSArray alloc] initWithContentsOfFile:
[[NSBundle mainBundle] pathForResource:@"hovedMenu" ofType:@"plist"]
];
for(NSDictionary *keyedValueDict in keyedValues) {
NSManagedObject *mObj = [NSEntityDescription insertNewObjectForEntityForName:@"Hovedmenu" inManagedObjectContext:[NSManagedObjectContext MR_defaultContext]];
for (NSString *attribute in attrs) {
id value = [keyedValueDict objectForKey:attribute];
if (value == nil) {
// Don't attempt to set nil, or you'll overwite values in self that aren't present in keyedValues
continue;
}
NSAttributeType attributeType = [[attrs objectForKey:attribute] attributeType];
if ((attributeType == NSStringAttributeType) && ([value isKindOfClass:[NSNumber class]])) {
value = [value stringValue];
} else if (((attributeType == NSInteger16AttributeType) || (attributeType == NSInteger32AttributeType) || (attributeType == NSInteger64AttributeType) || (attributeType == NSBooleanAttributeType)) && ([value isKindOfClass:[NSString class]])) {
value = [NSNumber numberWithInteger:[value integerValue]];
} else if ((attributeType == NSFloatAttributeType) && ([value isKindOfClass:[NSString class]])) {
value = [NSNumber numberWithDouble:[value doubleValue]];
}
[mObj setValue:value forKey:attribute];
NSLog(@"Value %@ for Key %@", value, attribute);
}
}
}
Взгляните на примеры здесь. Я отправил пример приложения, которое сначала проверяет, существует ли документ iCloud при инициализации нового хранилища на устройстве. http://ossh.com.au/design-and-technology/software-development/sample-library-style-ios-core-data-app-with-icloud-integration/ –
Проверка iCloud выполняется путем поиска каталог с тем же именем, что и 'NSPersistentStoreUbiquityNameKey' в каталоге контейнеров iCloud'/CoreData'. Эта проверка не будет работать, если устройство не войдет в iCloud или не имеет доступа к сети, поскольку другое устройство создало хранилище в iCloud. –