【问题标题】:Pass data from Collection View Controller to View Controller using delegates使用委托将数据从 Collection View Controller 传递到 View Controller
【发布时间】:2017-12-17 21:40:56
【问题描述】:

按下按钮时,我试图将数据从集合视图控制器发送到我的视图控制器。这是我目前所拥有的:

CollectionViewController.h

#import <UIKit/UIKit.h>

@class CollectionViewController;

@protocol CollectionViewDelegate <NSObject>

-(void) sendTest;

@end
@interface CollectionViewController : UICollectionViewController

@property (nonatomic, weak) id<CollectionViewDelegate> deligate;

@end

CollectionViewController.m

-(void) viewDidLoad {
  [super viewDidLoad];
}

...

NSLog(@"check");
[self.deligate sendTest];
NSLog(@"called");

FooViewController.m

#import "CollectionViewController.h"

@interface FooViewController () <CollectionViewDelegate> {}
@end

@implementation FooViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    CollectionViewController *controler = [[CollectionViewController alloc] init];
    controler.deligate = self;
}

- (void) sendTest {
    NSLog(@"Delegates are great!");
}

不幸的是,当我打电话给[self.deligate sendTest]; 时,什么也没发生。我知道它被调用了,因为我得到了check、called 日志。

【问题讨论】:

  • self.deligate 在您调用sendTest 时可能为零,因为 FooViewController 已被释放。拥有那些 NSLogs 并不会告诉你什么。使用一些断点。
  • 好的,感谢有关日志的建议。你能解释一下self.deligate吗?也许如何不让FooViewController 被释放?谢谢!
  • 委托属性“deligate”有一个弱引用,这很好,但这意味着委托需要被其他对象保留。我可以认为也许你在某个时候解雇了 FooViewController,然后它就永远消失了。您可以发布更多代码吗?你什么时候展示 CollectionViewController?
  • 项目的其余部分包含许多其他代码,可能会使其更复杂。集合视图控制器位于容器视图中。项目链接:github.com/pudility/quick-things/tree/master/quickthings/src/… 再次感谢您的帮助。

标签: ios objective-c uicollectionview delegates viewcontroller


【解决方案1】:

主要错误是您自己创建了CollectionViewController,但您不应该这样做。您想要的 CollectionViewController 由 Storyboard 自动实例化。如何找到这个视图控制器?

1 - 在 FooViewController 中的 segue 期间捕获它:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    CollectionViewController *collectionViewController =(CollectionViewController *) segue.destinationViewController;
    collectionViewController.deligate = self;
}

2 - 在 FooViewController 的子视图控制器中找到它

self.childViewControllers

对你有帮助吗?

【讨论】:

    猜你喜欢
    • 2020-02-17
    • 2019-06-15
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多