Objective-c,如何从另一个类访问实例变量

2023-11-24

我习惯于用Java编程并使用类变量来访问其他类的数据。然后我发现类变量在 Obj-C 中的工作方式不同,并且存在问题。

我的问题是,我想在用户登录后在另一个类中访问用户输入的密码。已在不同的论坛中阅读过,因此我应该使用类方法(+)来访问这些数据。但是因为我需要在第二类中创建第一个类的新实例,这意味着输入的密码在第一类的新实例中不存在。

我的代码如下:

class1.h

@interface class1 : UIViewController {
    UITextField *usernameField;
    UITextField *passwordField;
        UIButton *loginButton;
        NSString *password;
}

@property (nonatomic, retain) IBOutlet UITextField *usernameField;
@property (nonatomic, retain) IBOutlet UITextField *passwordField;
@property (nonatomic, retain) IBOutlet UIButton *loginButton;
@property (nonatomic, retain) NSString *password;

-(IBAction) loginButtonPushed;
+(NSString *)password;

@end

class1.m

#import "viewSwitcherViewController.h"

@implementation viewSwitcherViewController

@synthesize usernameField;
@synthesize passwordField;
@synthesize loginButton;
@synthesize password; // not needed

-(IBAction) loginButtonPushed {
        password = passwordField.text; //not needed
    // ...Code for switching view if successful login... EDITED:
    class2 *c2 = [class2 alloc] init]; //Instantiating new class2 object
    c2.password = passwordField.text; //Assigning tekst from passworField to thePassword-variable in the class2 instance.
}

class2.m

#import "class2.h"
#import "class1.h"

@implementation class2

@synthesize thePassword; //NSString variable

// this method is also not needed
-(void) someMethodUsingPassword {
         class1 *c1 = [[class1 alloc] init];
         thePassword = [c1 password];
         NSLog(@"The password is: %@", thePassword); //This call returns null
}

所以我的问题是在class2中创建的c1实例不保存提交的密码,因此返回“null”。

也许这只是我的 Java 方法搞砸了,但我找不到任何其他方法,所以请帮助:)!


Java 中的公共类变量相当于 C 和 Objective-C 中的全局变量。您可以将其实现为:

class1.h

extern NSString* MyGlobalPassword;

class1.m

NSString* MyGlobalPassword = nil;

然后,任何导入 class1.h 的人都可以读取和写入MyGlobalPassword.

一个稍微好一点的方法是通过“类方法”访问它。

类1.h:

@interface Class1 : UIViewController {
    UITextField *usernameField;
    UITextField *passwordField;
    UIButton *loginButton;    
}
+ (NSString*)password;
@end

1 类.m:

static NSString* myStaticPassword = nil;

@implementation Class1
+ (NSString*)password {
    return myStaticPassword;
}

- (void)didClickLoginButton:(id)sender {
    [myStaticPassword release];
    myStaticPassword = [passwordField.text retain];
}

然后其他类将通过读取密码password类方法。

Class2.m:

-(void) someMethodUsingPassword {
     thePassword = [Class1 password]; // This is how to call a Class Method in Objective C
     NSLog(@"The password is: %@", thePassword); 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Objective-c,如何从另一个类访问实例变量 的相关文章

  • 找不到 Cocoa/Cocoa.h 文件

    我在用XMPPFramework在我的应用程序中 我已将 Cocoa Cocoa h 导入到我的 m 文件中 但是当我构建项目时Xcode显示错误 错误 未找到 Cocoa Cocoa h 文件 我该如何解决这个错误 如果您正在为 iOS
  • 如何检测 UIImage 的非透明部分何时与 UIImage 的另一个非透明部分接触

    我在完成一些我认为会容易得多的事情时遇到了困难 每当 UIImage 中图片的非透明部分接触 UIImage 中包含的图像的另一个非透明部分时 我试图运行一个方法 我举了一个例子来帮助进一步解释我的问题 正如您在上图中看到的 我有两个三角形
  • UITableView 给出空表,不加载数据

    当保存我的表的视图是主 第一个 视图时 一切正常 但是 当它不是第一个视图并且我切换到该视图时 我的表不会加载数据 并且我得到一个空桌子 使用 NSLog 我可以看出该程序是不调用 numberOfRowsInSection 和 cellF
  • C / Objective C 中的 switch 语句

    我是 Objective C 的新手 但根据我对 switch 语句的了解 以下代码不应该打印任何内容 因为对我来说 似乎应该存在编译错误 但是打印了 2 我不懂为什么 有人可以解释一下吗 void test int myVar 2 swi
  • 我可以在滚动时固定表格的 tableHeaderView 位置吗?

    我有一个表视图 并在其 tableHeaderView 上附加了一个 UISegmentedControl 如何使 tableHeaderView 固定 以便即使在滚动表视图时也始终可以在同一位置查看 UISegmentedControl
  • Objective-C 中的 at 符号和大括号,@{ ... } 是什么意思?

    我在 Objective C 中有这一行 NSMutableArray mutableArray mutableArray addObject Something aObject Otherthing anotherObject 什么是 部
  • NSLocale 货币符号,显示金额值之前或之后

    我在用StoreKit在我的应用程序中实现应用程序内购买商店 我有一个自定义设计 这意味着价格的值应该是白色的且较大的 货币符号较小 较暗并与价格值的顶部对齐 我可以使用以下命令毫无问题地获取货币符号NSLocale in SKproduc
  • 快速从 appDelegate 中 popToRootViewController

    我试图从应用程序委托弹出到导航堆栈的根视图控制器 并且在将 obj c 中的内容转换为 swift 时遇到一些问题 obj c 中的工作原理 UINavigationController navigationController UINav
  • 如何对 iPad 应用程序进行类转储?

    我正在尝试运行 iPad 应用程序的类转储来探索其架构 我使用 The Unarchiver 提取了 ipa 文件 并从 Payload 文件夹中对 app 文件运行了 class dump 但是 我收到此错误 Generated by c
  • 使用 AFNetworking 的 setImageWithURL 时如何配置缓存

    我在用着setImageWithURL在我的应用程序中下载一些图像 是否可以 指定此图像必须在缓存中保存多长时间 例如 1 周 指定缓存的最大总大小有多大 例如 200 兆 查看图像缓存中有什么 清除缓存 文档 http engineeri
  • iOS UITableViewCell需要按两次才能调用didSelectRowAtIndexPath

    我有一个 UITableView 有时需要您触摸它两次才能选择一个单元格 更多细节 仅当表格一直向上或一直向下滚动后才需要两次触摸 只需第二次触摸即可呼叫didSelectRowAtIndexPath 当表格以自然的 向上滚动位置 打开时
  • 在 UITableView 中设置滚动位置

    我有一个应用程序 其工作方式与 iPhone 的 联系人 应用程序的工作方式有些相似 当我们添加新的联系人时 用户将被定向到包含联系人信息的仅查看屏幕 如果我们从导航栏中选择 所有联系人 用户将导航到查看最近添加的联系人的所有联系人列表 我
  • 使用 NSSet/NSMutableSet 来过滤对象?

    我已经看到一些有关使用 NSSet NSMutableSet 过滤对象的问题 答案 这些情况使用简单类型的对象 例如NSString or int 以下是用于过滤的代码示例NSString对象 NSSet smallArray NSSet
  • ios 8 核心数据崩溃

    保存时 CoreData 发生崩溃 2014 09 16 09 51 58 273 My app 2678 105246 Terminating app due to uncaught exception NSInvalidArgument
  • 在 UITableviewCell 高度动画的同时动画 CALayer 阴影

    我有一个 UITableView 我正在尝试使用它来展开和折叠beginUpdates and endUpdates方法并在发生时显示阴影 在我的自定义 UITableViewCell 中 我有一个图层 我为其创建阴影layoutSubvi
  • 使用 UIImagePickerController 的应用程序在拍照后选择“使用照片”时冻结

    我现在正在开发一个简单的照片和视频捕获应用程序 该应用程序成功地允许用户按下按钮即可拍摄照片或视频 但是 一旦您完成拍摄照片或视频 它就会提供 2 个选项 重新拍摄 和 使用照片 或 使用视频 具体取决于您使用的选项 如果用户点击 重新拍摄
  • 对 UIImage 进行方形裁剪,导致图像拉伸

    当尝试执行 UIImage 的中心裁剪时 我得到以下结果 左侧是原始图像640 1136 右边是适合正方形的裁剪图像UIImageView at 320 320 turns to 我对比率元素进行了相当多的修改 以便它可以正确检测要修剪的量
  • 使用反射的属性类型或类

    我想知道是否可以确定对象属性的类或原始类型 获取所有属性名称和值非常容易 所以答案 https stackoverflow com questions 2299841 objective c introspection reflection
  • 如何使用 ZBar 读取器的 scanCrop 属性?

    我正在使用 iPhone 的 ZBar SDK 来扫描条形码 我希望阅读器仅扫描特定的矩形而不是整个视图 为此需要将阅读器的 scanCrop 属性设置为所需的矩形 我很难理解必须设置的矩形参数 有人可以告诉我如果在纵向视图上它的坐标是 我
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p

随机推荐