【问题标题】:Xcode: expression is not assignableXcode:表达式不可分配
【发布时间】:2014-04-23 08:22:04
【问题描述】:

在用户成功通过身份验证后,我正在尝试“刷新”/“更新”我的应用程序中的共享字符串。这是我所拥有的:

// MyAuth.h
//@interface
+ (NSString *)sharedAuthToken;

// MyAuth.m
+ (NSString *)sharedAuthToken {
    static NSString *_sharedAuthToken = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _sharedAuthToken = [[NSUserDefaults standardUserDefaults] objectForKey:@"token"];
    });

    return _sharedAuthToken;
}

// AuthCtrl.m
- (void)saveOauthInfo:(NSString *)token {

    [MyAuth sharedAuthToken] = token; // getting error here
}

我想更新或刷新sharedAuthToken。我该怎么做?

*如果代码太混乱或太杂乱,请告诉我..

【问题讨论】:

  • 您是只想在内存中设置令牌,还是要将新令牌存储在用户默认值中?
  • @robmayoff 感谢您的快速回复。我想在内存中设置令牌
  • 我不希望这听起来很粗鲁,但是如果你通过在 Stack Overflow 上提问来拼凑你的应用程序,那么你的整体表现不会很好。您应该找到一本好书或一系列在线教程,并真正了解您正在使用的工具。看看Good resources for learning ObjC。 Big Nerd Ranch 的书籍非常棒,很多人喜欢 iTunes U 上的斯坦福 iOS 课程。祝你好运!
  • @JoshCaswell 别担心,没有冒犯。谢谢你。看起来不错,会去看看:)
  • 太好了,祝你好运!

标签: ios objective-c xcode


【解决方案1】:

创建另一个类方法:

+(void) setSharedAuthToken:(NSString *) token;

_sharedAuthTokensharedAuthToken 方法移动到 类的范围之外,但仍然 MyAuth.m 文件内:

static NSString *_sharedAuthToken;

@implementation MyAuth ...

实现新的类方法:

+(void) setSharedAuthToken:(NSString *) token {
   _sharedAuthToken = token; 
}

然后在您的saveOauthInfo 方法中:

[MyAuth setSharedAuthToken:token];

【讨论】:

  • 您在类方法中使用 ivar?这不会编译;我认为解决方案是将其保存为用户默认值
  • 这是一个非常好的观点。您可以在类实现范围之外但在 .m 文件内添加 static NSString *_sharedAuthToken
  • 如果你走这条路,我会考虑用 @synchronized(_sharedAuthToken) { ... } 将任务包装在 setter 中。
【解决方案2】:

你没有setter方法。

+ (NSString *)sharedAuthToken 是一个“getter”,只返回数据。

你应该设置一个@property,如果它适合你的需要,它会为你生成一个setter,或者创建你自己的。

例如

+ (void)setSharedAuthToken:(NSString *)token { ... }

当然,由于您让 getter 将令牌存储在静态局部变量中,并且进一步将其设置包装在 dispatch_once 中以使其成为单例,因此您必须重构所有这些。

【讨论】:

  • 您不能在 Class 级别声明属性,OP 需要创建一个单例实例而不是该属性。这就是您所说的“重构所有这些”的意思吗?
  • 这正是我所暗示的。
猜你喜欢
  • 2021-08-04
  • 2011-08-06
  • 2017-03-10
  • 2020-07-25
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多