2014-01-20 3 views
2

Я довольно новыми для IOS и сейчас я работаю над этим большим проектом, который требует доступа к файлам из каналов хранения, таких как Dropbox и googleDrive ...DBRestClient не работает, когда вызывается из NSObject

мне удалось получить к файлам dropbox и манипулировать ими, но проблема в том, что я не могу этого сделать без наличия свойства DBRestClient в классе представления (UITableView в моем случае), который не является таким MVC.

Когда я пытаюсь использовать его в другом классе, скажем NSObject, который реализует DBRestClientDelegate, ничего не происходит.

Я знаю, что эта проблема была опубликована раньше, а некоторые говорят, что у 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!!!!!!!!!!!!!!!!!!!"); 
} 

Здесь вы UITableView класс, который я использовал, чтобы иметь DBRestClient в:

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

, но когда я попытайтесь загрузить метаданные:

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

ничего не происходит.

ответ

0

После почти двух недель без ответа я попробовал совершенно другой подход. Я узнал интересный факт на этом посту Custom UIView as UITableView delegate and datasource?, и это контроллер делегата каждого из моих UITableViews не обязательно должен быть контроллером представления, который отображает его.

Таким образом, я мог бы просто поместить мой DBRestClient во вновь созданный viewController (или tableViewController в моем случае dropboxFolderItemsTableViewController) и иметь сильную ссылку на него из моего контроллера представления, который фактически содержит представления таблиц, а затем назначить фактический dropbox tableView (dropboxFolderItemsTableView), чтобы быть табличным представлением этого вновь созданного viewController.

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

Im сталкивается с тем же вопросом, который у вас есть, хотя я не думаю, что это решение четко решает проблему MVC. Я буду искать более подходящее решение. – carbonr

Смежные вопросы