从 NSObject 调用时 DBRESTClient 不起作用

Posted

技术标签:

【中文标题】从 NSObject 调用时 DBRESTClient 不起作用【英文标题】:DBRestClient not working when called from an NSObject 【发布时间】:2014-01-20 15:58:14 【问题描述】:

我对 ios 还很陌生,我现在正在从事这个需要从存储通道(如 Dropbox 和 googleDrive)访问文件的大型项目...

我设法访问了保管箱文件并对其进行了操作,但问题是如果没有视图类上的 DBResClient 属性(在我的情况下为UITableView),我无法做到这一点,这不是 MVC。

当我尝试在另一个类上使用它时,比如实现 DBRESTClientDelegate 的 NSObject,什么都没有发生。

我知道这个问题之前已经发布过,有人说NSObject 需要对其进行强引用,以便它不会被释放,但我这样做了,仍然没有任何反应。

这是我的一些代码:

NSObject 类 DropboxServices

@interface DropboxServices : NSObject <DBRestClientDelegate>
@property (nonatomic, readonly) DBRestClient *restClient;


@implementation DropboxServices
@synthesize restClient=_restClient;
- (DBRestClient *)restClient 
    if (!_restClient) 
        if ( [[DBSession sharedSession].userIds count] ) 
            _restClient = [[DBRestClient alloc] initWithSession:[DBSession sharedSession]];
            _restClient.delegate = self;
        

    
    return _restClient;

- (void)restClient:(DBRestClient *)client loadedMetadata:(DBMetadata *)metadata 

    NSLog(@"method called!!!!!!!!!!!!!!!!!!!");

这是我曾经拥有 DBRESTClient 的 UITableView 类:

@interface DropboxFolderItemsTableView : UITableView 
@property (nonatomic, readonly) DropboxServices *dropboxServices;

但是当我尝试加载元数据时:

[[self.dropboxFolderItemsTableView.dropboxServices restClient] loadMetadata:@"/"];

什么都没有发生。

【问题讨论】:

【参考方案1】:

在将近 2 周没有回应之后,我尝试了一种完全不同的方法。 我在这篇帖子Custom UIView as UITableView delegate and datasource? 中发现了一个有趣的事实,那就是我的每个 UITableViews 的委托控制器不一定是显示它的视图控制器。

所以我可以将我的 DBRESTClient 放在一个新创建的 viewController(或在我的情况下为 dropboxFolderItemsTableViewController 的 tableViewController)中,并从实际上包含表视图的视图控制器中对其进行强引用,然后分配实际的 dropbox tableView ( dropboxFolderItemsTableView) 作为这个新创建的 viewController 的表视图。

self.dropboxFolderItemsTableViewController=[[DropboxFolderItemsTableViewController alloc]init];
self.dropboxFolderItemsTableViewController.tableView=self.dropboxFolderItemsTableView;

【讨论】:

我面临同样的问题,尽管我认为这个解决方案不能清楚地解决 MVC 问题。我会寻找更合适的解决方案。

以上是关于从 NSObject 调用时 DBRESTClient 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

ios开发之 NSObject详解

-[NSObject(NSObject) doesNotRecognizeSelector:] 调用时崩溃 -[ViewController prepareForSegue:sender:]

从 NSObject 类创建一个数组

从闭包中调用“完成”时出错

在 NSObject 类中设置协议并在 UIViewController 类中调用它们

iOS9如何调用NSObject类中的UIAlertviewController?