1

我有一个要作为 .plist 上传到保管箱文件夹的 xml 字符串。

目前我创建一个 NSDictionary 并创建一个临时文件夹,我将字典作为 plist 写入该临时文件夹,并将该临时文件夹中的 .plist 上传到保管箱。

我猜这不是一个好的编程解决方案;

这工作正常

if([title isEqualToString:@"Upload to Dropbox"])
    {


        //pass string in memory to nsdictionary
        NSData * data = [_uploadPlistString dataUsingEncoding:NSUTF8StringEncoding];
        NSString *errorDesc = nil;
        NSPropertyListFormat format;
        NSDictionary *uploadFile= (NSDictionary*)[NSPropertyListSerialization
                                         propertyListFromData:data
                                         mutabilityOption:NSPropertyListMutableContainersAndLeaves
                                         format:&format
                                         errorDescription:&errorDesc];


        //create a temp folder
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"temp"];
        NSLog(@"documents datapath: %@",dataPath);
        //check if folder exist
        NSError *error = nil;
        if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
            [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error]; //Create folder



        //write dictionary to plist
        NSString *pathTemp = [dataPath stringByAppendingPathComponent:@"agenda.plist"];
        // write plist to disk
        [uploadFile writeToFile:pathTemp atomically:YES];


        //get last created file name from singleton
        SingletonClass *sharedInstance=[SingletonClass sharedInstance];
        NSString *destDirectory= sharedInstance.lastCreatedFolderName;

        //set file name for dropbox
        NSString *filename = @"agenda.plist";
        [[self restClient] uploadFile:filename toPath:destDirectory
                        withParentRev:nil fromPath:pathTemp];


    }

但是如何将内存中的 NSDictionary 直接上传到 Dropbox?

无需将其写入捆绑软件或类似的东西。

4

1 回答 1

0

Dropbox SDK 的公共 API 仅支持直接从文件上传。

但是,由于 SDK 是开源的,您可以轻松地对其进行扩展。

主要上传发生在

- (void)uploadFile:(NSString*)filename toPath:(NSString*)path fromPath:(NSString *)sourcePath
params:(NSDictionary *)params

在 DBRESTClient.m 中。

您可以向 DBRESTClient 添加一个类别,并为上传添加一个类似的方法,该方法采用 NSData 而不是文件路径。

您可以复制他们的大部分实现,但您可以使用 NSData 代替文件名。更改 dropbox 上文件名生成的工作方式,并使用 NSData 而不是文件来实例化 NSInputStream。

要从字典中获取 NSData,您可以使用 NSKeyedArchiver。

于 2012-11-08T20:21:28.270 回答