【问题标题】:Accessing NSString from another .m file [closed]从另一个 .m 文件访问 NSString [关闭]
【发布时间】:2013-10-25 11:39:18
【问题描述】:

我需要访问Class2.m 中的 userEMail (NSString) 属性,但它返回 null。

Class1.h:

@interface AuthController : UIViewController 
{

    @public  NSString *const userPassword;
    @public  NSString *const userEMail;
    @public  NSString *const userFullName;

}

@property (nonatomic, strong) NSString *userEMail;

然后在 Class1.m 中保存 userEMail。

Class2.m:

AuthController *ac = [[AuthController alloc] init];
NSLog(@"%@", ac.userEMail);

【问题讨论】:

  • 你在哪里设置?你打电话给[ac setUserEMail:@"mymail@somemail.com];
  • 在第一个class.m文件中合成userEmail
  • 在 Class1.m 中设置它。用 NSLog 测试了它的值,没问题。
  • 请包括所有内容。 Setter、getter 等如果您不共享所有内容,我们将无法提供有效的帮助
  • 为什么你的iVars 设置为const

标签: ios iphone objective-c


【解决方案1】:

我只是把基本步骤放在这里,根据你的要求改变它。

你只需要写

@property (nonatomic, strong) NSString *userEMail;

在您的first.h 文件中

second.h文件

@property (nonatomic, strong) NSString *gotUserEMail;

还有你的first.m 文件

你有 gotUserEMail 带有一些值的字符串..

将它传递给 anotherViewController 这样的谎言,

secondViewController *addView = [[secondViewController alloc] init];
addView.gotUserEMail = userEMail;

.
.
.
.

编辑

好的,那么你需要使用NSUserDefault

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setValue:userEMail forKey:@"myEmailString"];
[userDefaults synchronize];

通过,在您的项目中的任何地方,

NSUserDefaults *data = [NSUserDefaults standardUserDefaults];  
NSString  *gotEmail = [data floatForKey:@"myEmailString"];

【讨论】:

  • 我需要在多个类中获取userEMail值,所以向每个类发送数据是错误的
  • @user2851844 - 检查我编辑的答案:)
  • 使用单例类对他的追求不是更好。
【解决方案2】:

在阅读了对另一个答案的评论后

我需要在多个类中获取 userEMail 值,所以向每个类发送数据是错误的

听起来你更像是在上单例课。所以尝试这样的事情

AuthObject.h

@interface AuthObject : NSObject 

@property (nonatomic, strong) NSString *userEMail;

+ (AuthController*)authInstance;

@end

AuthObject.m

#import "AuthObject.h"

@implementation AuthObject

@synthesize userEMail = _userEMail;

static AuthObject *authObjectSharedInstance = nil;

+ (AuthObject *)authInstance 
{
    static dispatch_once_t instanceToken;
    dispatch_once(&instanceToken, ^{
        authObjectSharedInstance = [[AuthObject alloc] init];
    });
    return authObjectSharedInstance;
}

@end

然后在另一个类的另一个方法中,只要你在某个地方导入了AuthObject.h 就可以了

- (void)someMethodIMadeUpInClass1
{
    AuthObject *authObj = [AuthObject authInstance];
    [authObj setUserEMail:@"myemail@address.com"];
}

然后你可以在完全不同的课程中做

- (void)someMethodIMadeUpInClass2
{
    AuthObject *authObj = [AuthObject authInstance];
    NSLog(@"my email : %@", [authObj userEMail];
}

理论上,如果您正在创建一个单例类而不通过sharedInstance(此处为authInstance),那么该代码将被破坏。试图隐藏这种破碎只会在以后引起痛苦。这就是为什么我会选择单例类而不是使用NSUserDefaults

【讨论】:

  • @downvoter 请给出拒绝投票的理由。我可以举很多例子(链接、文章等),在这里单身人士是完美的。那么为什么要投反对票呢?
  • 这又得到了另一个反对意见,但没有留下任何理由。请提供拒绝投票的原因,我可以在可能的情况下更正。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
  • 2016-01-13
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多