0

我目前正在开发一个 iOS 应用程序并正在实现 Box.Net SDK。除了移动文件的能力之外,我已经完成了所有工作,这不是 SDK 的本机功能。我试图通过它扭转我的方式。

如果你熟悉 Box.Net 的结构,每个文件/文件夹都有一个自己的 ID 号,以及一个其父级的 ID。据我了解,如果我想移动文件,我应该更改文件上的父 ID 号,将其指向新位置。我似乎无法让它正常工作。我的应用程序似乎一直在崩溃。

这是我到目前为止所概括的。

BoxObject *boxObject = [[[Box objectWithID:(ID#ofParent)] children] objectAtIndex:i];
[boxObject parent].boxID = 0; // <-- Problem (causes crash)

我也试过这个。

[boxObject setParent:[Box folderWithID:[BoxID numberWithInt:i]]];

boxObject 变量是我要移动的文件。我将其父 ID 设置为 0,它应该是根文件夹。但是,当我尝试为文件重新分配父 ID 时,我的应用程序崩溃了。关于如何成功移动文件/文件夹的任何想法?任何帮助深表感谢!提前致谢!

4

1 回答 1

0

好的。我想没有办法用 SDK 在内部解决这个问题。所以,我不得不发出一个外部 PUT 请求。我使用以下代码来处理移动文件。

- (void)moveItem:(BoxObject *)object toParentFolderWithID:(BoxID *)parentID
{
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://api.box.com/2.0/files/%@", object.boxID]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PUT"];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *auth = [NSString stringWithFormat:@"BoxAuth api_key=%@&auth_token=%@",[Box boxAPIKey],[defaults objectForKey:@"box-api-auth-token"]];

NSString *payload = [NSString stringWithFormat:@"{\"parent\": {\"id\": %@}}", parentID];
[request setHTTPBody:[NSMutableData dataWithData:[payload dataUsingEncoding:NSUTF8StringEncoding]]];
[request setValue:auth forHTTPHeaderField:@"Authorization"];

NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
[connection start];
}

提醒一下,如果您是 Box SDK 的新手,您很可能需要在移动文件后更新/刷新数据。如果不处理,如果文件不存在,您的应用程序可能会崩溃。希望这对任何对此不确定的人有所帮助。

于 2012-12-24T01:26:53.053 回答