如何确保输入到 UIAlertview 中的文本转换 UIButton 的文本并在退出并重新进入应用程序后保持这种状态

How do I ensure that the text entered into a UIAlertview transforms the text of a UIButton and STAYS that way after exiting and reentering the app

TL;DR:打开 iOS 应用 输入促销代码 关闭应用 打开应用程序 实际结果: 促销代码框不合时宜(见图片) 预期成绩: 促销代码仍应显示

所以我有一个 UIButton,在用户单击它并退出并重新运行应用程序后,它的文本不断变化。所以这是更改前该区域的样子:

然后,在用户单击按钮后,系统会提示他们使用 UIAlertview

最后,在用户输入促销代码后,他们 return viewcontroller 和 UIButton,在采用促销代码的名称后,完全改变大小、字体和文本。这是预期的目标。问题是当我关闭应用程序并在模拟器中重新运行它时,会出现一条不同的消息,而不是输入的原始促销代码。

我可以根据要求添加更多 code/explanation。预先感谢您的帮助。

编辑:这是故事板中按钮的样子:

NSUserdefaults 代码:

- (BOOL)hasStoredPromotionCode {
    NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"userPromotion"];
    self.promotion = (PNGPromotionModel *)[NSKeyedUnarchiver unarchiveObjectWithData:data];

    if (self.promotion) {
        return YES;
    }

    return NO;
}

如果您无法从 NSUserDefaults 中检索您的值,则表示它没有正确存储。

我不确定您如何使用您的对象,但请确保您在用户默认设置中正确存储。

- (void)storeInDefaults:(MyObject*)object {
   NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
   [defaults setObject:[NSKeyedArchiver archivedDataWithRootObject:object] forKey:@"userPromotion"];
   [defaults synchronize];
}

当您将 NSKeyedArchiver 与自定义对象一起使用时,您还必须通过实现 initWithCoder:encodeWithCoder 来确保您的对象遵守 NSCoding 协议。 https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Reference/Foundation/Protocols/NSCoding_Protocol/index.html

最终成为实际问题的是我没有使用 UIControlStateSelected。一个愚蠢的错误。但那是实际问题。即使在同步我的默认值并确保成功块正确返回数据,并且我随后正确访问该数据之后,该按钮仍然遇到问题。

最终修复它的代码如下:

 [self.promoCodeButton setTitle:buttonTitle forState:UIControlStateNormal & UIControlStateHighlighted & UIControlStateSelected];