我的应用程序是我之前询问过的。它是一个XML解析器,它显示了来自XML的多个项目,等于该应用程序已打开的天数。我的问题主要是这样的:我在1.0版本中没有与iCloud建立任何关系。我很快就会发布iPad版本的应用程序,因为它受欢迎,并且担心那些在iPhone上使用该应用程序一段时间的应用程序现在将重置为iPad版本的第1天。我在GitHub上发现了MKiCloudSync,并想知道这是否会很好实现,以便应用始终在所有设备上保持同步?如果确实如此,那么在应用程序的1.1版本中添加它会自动与现有库进行同步,还是必须先更新iPhone版本,让它同步,然后再将它取得iPad版本?基本上只是希望它保持同步。NSUserDefaults和iCloud
这里是我用来存储NSUserDefault值的AppDelegate代码。虽然,一些NSUserDefaults可以在其他类中更改。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
sleep(3);
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (![defaults integerForKey:@"totalDays"]) {
// if there is no value for the key, set it to 1
[defaults setInteger:0 forKey:@"totalDays"];
}
if (![defaults objectForKey:@"currentDate"]) {
[defaults setObject:@"32 01" forKey:@"currentDate"];
}
if (! [defaults boolForKey:@"marked"]) {
[defaults setBool:NO forKey:@"marked"];
}
if (![defaults arrayForKey:@"checkedrows"]) {
NSMutableArray *arr1 = [NSMutableArray arrayWithArray:[defaults arrayForKey:@"checkedrows"]];
}
NSDate *date = [NSDate date];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
[dateFormat setDateFormat:@"dd MM"];
NSString *dateString = [dateFormat stringFromDate:date];
[dateFormat release];
NSString *checkdate = [defaults objectForKey:@"currentDate"];
if (![dateString isEqualToString:checkdate]) {
NSInteger currentnumber = [defaults integerForKey:@"totalDays"];
[defaults setObject:dateString forKey:@"currentDate"];
[defaults setInteger:currentnumber+1 forKey:@"totalDays"];
}
[defaults synchronize];
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];
return YES;
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSLog(@"enteredfore");
NSDate *date = [NSDate date];
// format it
NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
[dateFormat setDateFormat:@"dd MM"];
// convert it to a string
NSString *dateString = [dateFormat stringFromDate:date];
// free up memory
[dateFormat release];
NSString *checkdate = [defaults objectForKey:@"currentDate"];
NSLog(@"hereitis%@", checkdate);
if (![dateString isEqualToString:checkdate]) {
NSInteger currentnumber = [defaults integerForKey:@"totalDays"];
NSLog(@"The current number is %i", currentnumber);
[[NSNotificationCenter defaultCenter] postNotificationName:@"EnteredForeground"
object:nil];
[defaults setObject:dateString forKey:@"currentDate"];
[defaults setInteger:currentnumber+1 forKey:@"totalDays"];
[defaults synchronize];
}
}
感谢
叶这就是我需要的词:D冲突解决 - 你的应用程序iPhone在这种情况下可以重置! –
关于其他可行的类或者我可以用来处理冲突解决方法的任何建议? – user717452
这个怎么样...而不是调用MKiCloudSync时,应用程序变为活动,我添加一个按钮到UI调用同步,并有同步它?这样,用户可以选择要同步的设备以及何时进行同步?它不会是一个完美的解决方案,因为它不会每次都同步,但至少可以解决覆盖已经运行了50天的新设备的问题,正如Daji-Djan所说。 或...每当应用程序准备关闭时询问用户是否要同步数据,都会弹出UIAlertView? – user717452