tabBarController将委托方法发送给不响应它们的选项卡

时间:2014-06-19 18:47:05

标签: ios objective-c delegates

使用Storyboard我已经设置了一个带有三个标签栏的应用程序。当我单击其中一个选项卡并让单例数据源类执行操作,然后立即切换到另一个选项卡时,当单例完成从外部获取数据时,它会尝试将其发送到当前选项卡,这会导致崩溃,因为当前选项卡我在不响应我在单例委托中实现的特定委托方法,并且不应该实现,因为没有理由使该特定选项卡执行该操作。以下是我的代表当前的设置方式。

@class DataHolder;

@protocol DataHolderControllerDelegate <NSObject>
@required
-(void)logout;
@optional
-(void)friendsQuarryDidFinishWithData;
-(void)pendingFriendsQuarryDidFinishWithData;
-(void)allUsersQuarryDidFinishWithData;
-(void)additionalFriendsFoundAndAdded;
-(void)messageQuarryFinishedWithData;
-(void)thumbnailQuaryDidFinishWithData;
-(void)sentRequestUsersFoundWithData; 
@end

@interface DataHolder : NSObject;
@property (nonatomic,weak) id <DataHolderControllerDelegate>delegate;

在查询数据时,在方法内调用委托。

-(void)messageQuarry{
    PFQuery *messageQUery = [PFQuery queryWithClassName:@"Message"];
    messageQUery.cachePolicy = kPFCachePolicyCacheThenNetwork;
    [messageQUery whereKey:@"recipientIds" equalTo:[[PFUser currentUser] objectId]];
    [messageQUery whereKey:@"file_type" equalTo:@"original_image.png"];
    [messageQUery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (error){
            NSLog(@"ERROR: %@, %@", error, [error userInfo]);
        }else{
            messagesArray = [NSMutableArray arrayWithArray:objects];
            [delegate messageQuarryFinishedWithData];
        }
    }];
}

比,视图控制器有一个委托方法,这是调用上面的委托方法时调用的inboxViewController委托方法。

-(void)messageQuarryFinishedWithData{
    self.messages = [NSMutableArray arrayWithArray:dataHolder.getMessages];
    [self.tableView reloadData];
}

1 个答案:

答案 0 :(得分:1)

请记住,代表们应该是亲密的,这意味着它是一种1-1型的关系。看来你正在寻找的是一对多的关系,这就是NSNotificationCenter的用途。我建议查找Apple的NSNotificationCenter文档。