如何在segue中传递变量

how to pass the variable in segue

我在GroupView.h

中定义了变量
@interface GroupView()
{

  NSMutableArray *chatrooms;
}

@end

@implementation GroupView

现在我想在 segue 中传递这个变量

@interface FriendsViewController ()

 @end

@implementation FriendsViewController


 else if ([segue.identifier isEqualToString:@"showGroupView"]) {
          GroupView *groupView  = (GroupView *)segue.destinationViewController;
          groupView.chatrooms = [NSMutableArray arrayWithArray:chatrooms];
  }

我知道聊天室必须在头文件中 属性 才能以这种方式编码,但它不是

那么有没有办法在segue中使用这个变量呢

感谢您的帮助。

chatrooms 定义为像您所做的那样使用 -> 表示法访问的 ivar:

groupView->chatrooms = [NSMutableArray arrayWithArray:chatrooms]

不过,通常不鼓励这样做。您应该改用 属性:

@interface GroupView
@property (strong) NSMutableArray *chatrooms;
@end

顺便说一句,如果您使用的是 NSMutableArray,则表示您要直接修改数组的元素列表,而不是直接替换数组。如果您只想每次都用一个全新的数组替换数组,我建议改用 NSArray

这里要说明的另一点是,您正试图将 segue.destinationViewController 处的对象转换为 GroupView。您要么以极具误导性的方式命名了 UIViewController 子类,要么您没有将 GroupView 作为返回给您的 UIViewController 的正确成员进行访问。

通常情况下,如果您不构建 SDK 或其他东西。您真的没有更好的理由不在头文件中公开它。不过可以在extension中暴露属性,在host class中声明private的属性(只声明一个局部变量确实过不了)。例如,您有一个名为 GroupView+Helper 的分机。因此,您可以将其传递到扩展中公开的 属性 中。然后内部翻译成GroupView.

GroupView.m:

@interface GroupView
@property (strong, nonatomic) NSMutableArray *chatrooms;
@end

GroupView+Helper.h

@property (strong, nonatomic) NSMutableArray *internalChatrooms;

此外,您需要在GroupView中导入GroupView+Helper。 它将使您的 chatrooms 私人和内部聊天室受到保护。