• 关于iCloud的注册,到代码的实现


    关于iCloud的注册,到代码的实现   



    iCloud需要xcode4.x IOS5 sdk 请先做好准备工作


    1.需要传件一个新的app id,要是有了一个的话,保证着个app id 不是一个通配符的那种。

    2.创建完成之后,你要做的是开启这项功能,就跟开发推送一样,然后在创建一个新的Provisional Profile


    3.选择工程的summary,滚动到entitlement点击entitlements,xcode会自动的创建一个*.entitlements


    4.点击创建的*.entitlements,分别把pist列表里的三个字段都添上内容,格式为 (Team_ID.com.yourcompany.icloudtest),不要把team_id 跟 app_id弄混了啊,team_id是你创建完Provisional的时候,在最前面显示的那10个字符。


    5.然后就可以在delegate里面写下面的代码


    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
      // Override point for customization after application launch.
      self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

      NSFileManager *fileManager = [NSFileManager defaultManager];
      // Team-ID + Bundle Identifier
      NSURL *iCloudURL = [fileManager URLForUbiquityContainerIdentifier:@"ZZZZ826ZZ2.com.yourcompany.icloudtest"];
      NSLog(@"%@", [iCloudURL absoluteString]);

      NSUbiquitousKeyValueStore *cloudStore = [NSUbiquitousKeyValueStore defaultStore];
      [cloudStore setString:[iCloudURL absoluteString] forKey:@"iCloudURL"];
      [cloudStore synchronize]; // Important as it stores the values you set before on iCloud

      UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,round(self.window.bounds.size.height/4.0),self.window.bounds.size.width,round(self.window.bounds.size.height/8.0))];
      myLabel.font = [UIFont fontWithName:@"Marker Felt" size:round(self.window.bounds.size.width/20.0)];
      myLabel.numberOfLines = 4;
      myLabel.text =[ @"iCloudURL=" stringByAppendingFormat:@"%@", [cloudStore stringForKey:@"iCloudURL"]];
      myLabel.backgroundColor = [UIColor clearColor];
      myLabel.textColor = [UIColor whiteColor];
      myLabel.textAlignment = UITextAlignmentCenter;
      [self.window addSubview:myLabel];

      [self.window makeKeyAndVisible];
      return YES;
    }




    下面的代码,是参考的一个demo,没有试验过,不过应该是没问题的,仅供参考




    - (void)viewDidLoad
    {
        // 文件
        NSString *fileName = @"data.txt";

        // 得到文件管理器
        NSFileManager *manager = [NSFileManager defaultManager];

        // 验证iCloud是否激活
        NSURL *url = [manager URLForUbiquityContainerIdentifier:nil];
        if (url == nil) 
        {
            NSLog(@"iCloud未激活");
            return;
        }

        // 指定iCloud完整路径
        self.icloudURL = [NSURL URLWithString:fileName relativeToURL:url];

        // 得到本程序沙盒路径
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        self.filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:fileName];

        [super viewDidLoad];
    }




    - (void)viewDidUnload
    {
        self.filePath = nil;
        self.icloudURL = nil;
        self.textView = nil;
        self.label = nil;
        [super viewDidUnload];
    }


    // 按下上传按钮
    - (IBAction)uploadPressed:(id)sender
    {
        // 另起一个线程上传
        [NSThread detachNewThreadSelector:@selector(uploadICloud) toTarget:self withObject:nil];
    }


    - (void)uploadICloud
    {
        // 调用主进程的方法更新界面,在主进程外更新界面常会引起错误
        [self performSelectorOnMainThread:@selector(setString:)
                               withObject:@"开始上传"
                            waitUntilDone:NO];

        NSFileManager *manager = [NSFileManager defaultManager];

        NSArray *data = [[NSArray alloc] initWithObjects:self.textView.text, nil];

        // 判断本地文件是否存在
        if (![manager fileExistsAtPath:self.filePath]) {
            // 不存在则创建
            if (![data writeToFile:self.filePath atomically:YES]) 
            {
                [self performSelectorOnMainThread:@selector(setString:)
                                       withObject:@"写本地文件失败"
                                    waitUntilDone:NO];
            }
        }

        // 判断iCloud里该文件是否存在
        if ([manager isUbiquitousItemAtURL:self.icloudURL]) {
            // 存在则修改
            if (![data writeToURL:self.icloudURL atomically:YES]) 
            {
                [self performSelectorOnMainThread:@selector(setString:)
                                       withObject:@"写iCloud文件失败"
                                    waitUntilDone:NO];
            }
            [self performSelectorOnMainThread:@selector(setString:)
                                   withObject:@"上传成功"
                                waitUntilDone:NO];
            return;
        }

        // 上传至iCloud
        // 指定本地文件完整路径
        NSURL *url = [NSURL fileURLWithPath:self.filePath];
        NSError *error;
        // 官方文档建议本方法不要在主进程里执行
        if (![manager setUbiquitous:YES itemAtURL:url destinationURL:self.icloudURL error:&error]) 
        {
            NSLog(@"setUbiquitous error %@,\n%@", error, [error userInfo]);
            self.label.text = @"上传失败";
            return;
        }
        self.label.text = @"上传成功";
    }


    // 按下下载按钮
    - (IBAction)downloadPressed:(id)sender
    {
        self.label.text = @"开始下载";

        // 下载icloud文件
        if (![self downloadFileIfNotAvailable:self.icloudURL]) 
        {
            self.label.text = @"下载失败";
            return;
        }
        // 更新界面
        NSArray *array = [[NSArray alloc] initWithContentsOfURL:self.icloudURL];
        self.textView.text = [array objectAtIndex:0];

        self.label.text = @"下载成功";
    }


    // 此方法是官方文档提供,用来检查文件状态并下载
    - (BOOL)downloadFileIfNotAvailable:(NSURL*)file {
        NSNumber*  isIniCloud = nil;

        if ([file getResourceValue:&isIniCloud forKey:NSURLIsUbiquitousItemKey error:nil]) {
            // If the item is in iCloud, see if it is downloaded.
            if ([isIniCloud boolValue]) {
                NSNumber*  isDownloaded = nil;
                if ([file getResourceValue:&isDownloaded forKey:NSURLUbiquitousItemIsDownloadedKey error:nil]) {
                    if ([isDownloaded boolValue])
                        return YES;

                    // Download the file.
                    NSFileManager*  fm = [NSFileManager defaultManager];
                    if (![fm startDownloadingUbiquitousItemAtURL:file error:nil]) {
                        return NO;
                    }
                    return YES;
                }
            }
        }

        // Return YES as long as an explicit download was not started.
        return YES;
    }

  • 相关阅读:
    linux awk命令详解
    世界上最差的系统就是linux,双击不能安装软件
    硬盘安装CentOS 6.0(超级详细图文教程)
    Vim+cscope+ctags+tags阅读源代码
    使用vim看代码:cscope
    解决面板里没有network manager图标的问题
    【b804】双栈排序
    【BZOJ 1002】[FJOI2007]轮状病毒
    【BZOJ 1004】 [HNOI2008]Cards
    【t018】派对
  • 原文地址:https://www.cnblogs.com/ligun123/p/2398759.html
Copyright © 2020-2023  润新知