使用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];
}
答案 0 :(得分:1)
请记住,代表们应该是亲密的,这意味着它是一种1-1型的关系。看来你正在寻找的是一对多的关系,这就是NSNotificationCenter的用途。我建议查找Apple的NSNotificationCenter文档。