Ios 在块中创建对象
我试图在我的块调用中创建视图控制器,当它从块返回时,我的对象变为零。如何修复它 我的区块声明:Ios 在块中创建对象,ios,objective-c,objective-c-blocks,Ios,Objective C,Objective C Blocks,我试图在我的块调用中创建视图控制器,当它从块返回时,我的对象变为零。如何修复它 我的区块声明: typedef void (^GetViewController)(UIViewController *viewController, int index); 需要VC时调用块(viewController现在为零) 在另一个类中设置VC self.myController.getViewController = ^(UIViewController *viewController, int ind
typedef void (^GetViewController)(UIViewController *viewController, int index);
需要VC时调用块(viewController现在为零)
在另一个类中设置VC
self.myController.getViewController = ^(UIViewController *viewController, int index)
{
switch (index) {
case Option1:
viewController = [[Option1VC alloc] init];
break;
case Option2:
viewController = [[Option1VC alloc] init];
break;
default:
break;
}
//at this point VC is created
};
块正在修改传递给它的参数。参数按值传递,因此更改的值将被丢弃
为什么不让块返回视图控制器作为块结果?这样,编译器应该生成代码,使其保持活动状态,直到调用方有机会将结果分配给强变量 块正在修改传递给它的参数。参数按值传递,因此更改的值将被丢弃
为什么不让块返回视图控制器作为块结果?这样,编译器应该生成代码,使其保持活动状态,直到调用方有机会将结果分配给强变量 您可以对变量使用_块存储类型修饰符来修改块中的变量。如果没有此修饰符,变量在块的范围内是只读的。这将帮助您按值传递参数
您可以使用变量上的_块存储类型修饰符来修改块中的变量。如果没有此修饰符,变量在块的范围内是只读的。这将帮助您按值传递参数
指针指向指针是一个选项,即
typedef void (^GetViewController)(UIViewController** viewController, int index);
...
self.myController.getViewController = ^(UIViewController** viewController, int index)
{
*viewController = nil; // Avoid random value
switch (index) {
case Option1:
*viewController = [[Option1VC alloc] init];
break;
case Option2:
*viewController = [[Option1VC alloc] init];
break;
default:
break;
}
//at this point VC is created
};
指针指向指针是一个选项,即
typedef void (^GetViewController)(UIViewController** viewController, int index);
...
self.myController.getViewController = ^(UIViewController** viewController, int index)
{
*viewController = nil; // Avoid random value
switch (index) {
case Option1:
*viewController = [[Option1VC alloc] init];
break;
case Option2:
*viewController = [[Option1VC alloc] init];
break;
default:
break;
}
//at this point VC is created
};
我把它改成了回报VC,效果很好,但后来我意识到苹果是如何做到这一点的。我让dataSource成为委托,现在它的可重用性更强了。我把它改成了返回VC,它工作得很好,但后来我意识到苹果是如何做到这一点的。我使dataSource成为委托,现在它的可重用性更强了