如何确保输入到 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];
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];