【问题标题】:issue using access privileges使用访问权限问题
【发布时间】:2012-07-13 15:16:04
【问题描述】:

我有两个视图控制器和笔尖。我用切换开关填充了一个视图控制器,并在其头文件中声明了这一点:

@public UISwitch *toggleSwitch;

并将其公开为这样的属性:

@property (nonatomic,retain) IBOutlet UISwitch *toggleSwitch;

我还将开关连接到toggleSwitch 插座。现在我想在我的另一个视图控制器中使用这个toggleSwitch 字段,我该怎么做?在字段声明中使用@public 还不够吗?请帮忙。谢谢。

【问题讨论】:

    标签: objective-c ios cocoa-touch


    【解决方案1】:

    完全没有问题。只需像这样使用开关:

    vcWhereYouDeclaredTheSwitch.toggleSwitch.on = YES;
    

    BOOL test = [vcWhereYouDeclaredTheSwitch.toggleSwitch isOn];
    

    在您的其他视图控制器中。

    以下是关于属性的一些一般想法:

    • 内存管理:在幕后,它将创建一个设置器来创建具有正确内存管理的变量。它将为您省去一些麻烦,因为您可以轻松查看内存管理是如何完成的(strong/weakretain/copy/assign)。

    • 其他类的可访问性:如果您在 .h 中声明 @property 并在 .m 中声明 @synthesize,您的 ivar 将是公共可读和可写的。您可以使用 privat 类扩展来防止这种情况。您甚至可以声明 @property public readonly 并通过 privat 类扩展在内部声明它们 readwrite。 例如:私有财产

       // [In the implementation file]  
       @interface MyClass ()  
       @property (nonatomic, retain) NSMutableArray* someData; // private!!   
       @end  
    
       @implementation MyClass @synthesize someData   
       @end
    
    • 自定义 getter 和 setter:如果您愿意,您仍然可以编写自定义 getter 和 setter,甚至可以只编写一个 getter 或 setter 并让另一个自动 @synthesize。您可以将自定义逻辑写入这样的 getter 和 setter,例如您可以在 @property 更改后重新加载 tableview。

    • 符合自动键值观察 (KVO) 标准:如果您使用或计划使用 KVO,您只需声明属性即可免费获得它。其他什么都不需要做!

    • 如果您需要公开 iVar,编写 @property 比为 iVar 编写 getter 和 setter 更简单

    • 使用@property,您无需在 iVar 中声明(在 iOS 和 64 位 Mac Os X 应用程序中)。你可以通过@synthesize

        @synthesize myiVar = _myIvar;
    

    【讨论】:

    • 谢谢!它工作正常,但我检查了在 toggleSwitch 的声明中没有 @public 时它是否仍然有效,并且确实如此。为什么?仅仅是因为我在其他vc中导入了那个vc所以没关系吗?还有其他事情,虽然它在默认情况下打开开关的情况下工作正常,但是当我关闭开关时,它抛出了一个异常:main.m 文件中的“线程 1:信号 SIGABRT”。我在使用 Xcode 时经常遇到这个错误,这个错误真的让我很头疼。请帮忙。
    • 添加了一些关于 iVas 和属性的信息 - 关于您的其他错误:如果您从中提出新问题可能会更有用,以便每个人都可以帮助您和/或稍后使用这些信息。跨度>
    【解决方案2】:

    你已经创建了 UISwitch 的属性。因此,您可以通过使用 viewcontroller 对象在任何地方使用它。

    假设你想在你当前所在的视图中使用它然后使用它

    self.toggleSwitch

    // 或

    viewControllerObject.toggleSwitch

    【讨论】:

    • 我明白了。谢谢。另一个快速的问题-->虽然默认情况下开关打开时一切正常,但是当我关闭开关时,它抛出了一个异常:main.m 文件中的“线程 1:信号 SIGABRT”。我在使用 Xcode 时经常遇到这个错误,这个错误真的让我很头疼。请帮忙
    • 你一定是传递了一些错误的参数。你能分享一下你在哪里使用它的代码吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    相关资源
    最近更新 更多