NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"xxxxxxxx" forKey:@"name"];
[defaults synchronize];
Run Code Online (Sandbox Code Playgroud)
我需要知道为什么我必须使用上面代码的最后一行[defaults synchronize]?使用它的目的是什么?这是必须的吗?
我想将Swift样式字符串数组保存到NSUserDefaults中,但实际上代码中的"if"语句表示returnValue始终为nil.
稍后在代码(iOS 8)中我想使用"food + = ["spaghetti"]添加新条目.
var food : [String] {
get {
var returnValue : [String]? = NSUserDefaults.standardUserDefaults().objectForKey("food") as? [String]
if returnValue == nil //Check for first run of app
{
returnValue = ["muesli", "banana"]; //Default value
}
return returnValue!
}
set (newValue) {
NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "food")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
Run Code Online (Sandbox Code Playgroud) 我仍然是iOS开发和swift的新手,我不确定我是否过度思考这个问题.我目前正在开发一个应用程序,在打开时需要用户输入他们的登录凭据.这会变得乏味和令人沮丧,因为每次关闭应用程序并再次打开时,用户都必须登录.如果用户已经登录,是否有一种简单的方法可以让程序记住?
我正在研究CoreData,但每个示例都涉及每次都存储一个新对象,并且需要某种查询来获取信息.我真正需要的是一个bool isLoggedIn和一个用于存储用户ID的int.
编辑:
NSUserDefaults正是我想要的.
我对此很新手,但我一直试图弄清楚JSONDecoder如何为需要从MySQL数据库检索数据的登录功能起作用,如下面的代码所示,并且收到此错误.
SWIFT代码:
func testParseJson(){
var request = URLRequest(url: URL(string: "https://test.php")!)
request.httpMethod = "POST"
let postString = ("Email=test&Password=test")
print(postString)
request.httpBody = postString.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else { return }
do {
var responseString = String(data: data, encoding: .utf8)!
print("new response string \(responseString)")
let decoder = JSONDecoder()
let newData = try decoder.decode(User.self, from: data)
print(newData.Email)
print(newData.UserType)
} catch let err {
print("Err", err)
}
}.resume()
}
Run Code Online (Sandbox Code Playgroud)
临时结构我一直试图使用:
struct User: …Run Code Online (Sandbox Code Playgroud) 我在我的项目 (Swift) 中有一个 TableViewController 和一个 ViewController。我有一个开关可以改变我的应用程序的颜色(变暗)。问题是它只在我所在的场景中改变它。如果我去另一个场景,它是白色的。
我的代码:
import UIKit
class BaseTableViewController: UITableViewController {
@IBOutlet var InicioTable: UITableView!
@IBOutlet weak var cell2: UITableViewCell!
@IBOutlet var viewTable: UITableView!
@IBOutlet weak var celldarkmode: UITableViewCell!
@IBOutlet weak var label: UILabel!
@IBOutlet weak var switchController: UISwitch!
@IBAction func changeSwitch(_ sender: UISwitch) {
if switchController.isOn == true
{
self.navigationController?.navigationBar.isTranslucent = false
self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]//user global variable
self.navigationController?.navigationBar.barStyle = UIBarStyle.black //user global variable
self.navigationController?.navigationBar.tintColor = UIColor.black //user global variable
UIApplication.shared.statusBarStyle = .lightContent
label.textColor = UIColor.white
self.cell2.backgroundColor …Run Code Online (Sandbox Code Playgroud) 我想将一个变量从我的 UIKit 文件共享到我用 SwiftUI 创建的小部件扩展。 我跟着这个here。请看看 J Arango 的回答。
但我不明白那里的最后一部分。我必须使用import MySharedObjects.
所以我这样做了:
import MySharedObject
struct testing {
let mySharedObject = MySharedObject(name: "My Name", lastName: "My Last Name")
do {
let data = try JSONEncoder().encode(mySharedObject)
/// Make sure to use your "App Group" container suite name when saving and retrieving the object from UserDefaults
let container = UserDefaults(suiteName:"group.com.widgetTest.widgetContainer")
container?.setValue(data, forKey: "sharedObject")
/// Used to let the widget extension to reload the timeline
WidgetCenter.shared.reloadAllTimelines()
} catch {
print("Unable to …Run Code Online (Sandbox Code Playgroud) 我将在整个应用程序中使用一些字符串名称作为我的通知和用户默认名称。
我听说为了类型安全,将您的notification名称或UserDefaults键名称定义为静态字符串并使它们成为类或结构的一部分是一种很好的做法。
处理 Notification 和 UserDefault 名称的字符串名称的最常用方法是什么?
我曾考虑将它们作为全局变量放在我的 AppDelgate 类中,如下所示......
let MY_STRING_NAME = "My string name"
class AppDelegate: UIResponder, UIApplicationDelegate {}
/// Then just use MY_STRING_NAME in other classes.
Run Code Online (Sandbox Code Playgroud)
或者
class SomeClass {
let myStringName:String = "My string name"
}
/// Then use myClassInstance.myStringName
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
我的设计碰壁了。我试图将字符串从一个视图控制器传递到另一个视图控制器。这两个控制器没有与 segue 连接。我附上了我的故事板的屏幕截图。我有一种感觉,我唯一的选择是使用单例,或者代表可以吗?不使用方法:
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
Run Code Online (Sandbox Code Playgroud)
我无法通过 segue 标识符访问 VC1。如果不访问标识符,那怎么可能呢?
请看一下图片,让我知道我有哪些选择以及在这里最好使用什么。

我NSUserDefault用于在注册屏幕中存储用户信息。我在 iOS 应用程序的不同屏幕中使用这些数据。当我卸载此应用程序并再次安装时。不同屏幕中的数据为零,并且如果使用相同的凭据在另一个模拟器中运行此应用程序,则不同屏幕的数据也为零(不同的屏幕意味着主页和个人资料屏幕)。
如何解决这个问题呢??