Ich denke, ich bin müde von . Konnte nicht verstehen, was das Problem dahinter ist. Versuch, ein Array von [AnyObject]
zu NSCahce()
zu speichern, die ich mit dieser folgenden Codezeile gemacht habe.NSCache() funktioniert nicht richtig
NSCache().setObject(data, forKey: "News")
Und versucht, es auf diese Weise zurück zu bekommen.
if let news = NSCache()("News") as? [AnyObject]
{
}
else
{
// I am always here :)
}
Also dachte ich, was ist das Problem mit diesem. Nach ein wenig Suchen in Google konnte ich sehen, dass die Einstellung totalCostLimit
und countLimit
Ihnen helfen wird, dieses Problem zu lösen. Also habe ich es so eingestellt.
NSCache().totalCostLimit = 50000
NSCache().countLimit = 50000
Nachdem dies auch eingestellt wurde, funktionierte es nicht. Also dachte ich daran, diesen Code im Hauptthread auszuführen, was ich so gemacht habe.
dispatch_async(dispatch_get_main_queue()) {
NSCache().setObject(data, forKey: "News")
}
Immer noch zurück nil
. Jetzt last but not least habe ich eine globale Instanz von NSCache() erstellt und alle diese Operationen mit dieser Instanz aufgerufen. Nun, das hat auch nicht das erwartete Ergebnis gebracht. Es gab mir immer nil
.
Was passiert hier? Ich weiß, dass NSCache()
AnyObject
Werte speichern kann. Ich speichere viele Bilder im selben Projekt ohne Probleme, wenn ich versuche, das zu speichern, gibt es nil
zurück.
Nun, diese AnyObject
enthält einige benutzerdefinierte Klassen. Kann das ein Problem sein? Wenn ja, wie speichere ich es lokal, ohne CoreData
oder NSUserdefaults
zu verwenden.
Wie ich eine Instanz global erstellt und auf diese zugegriffen habe. Erstellte Datei eine Instanz nscache im AppDelegate.swift aber außerhalb AppDelegate Klasse
let mainCache = NSCache()
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(aNotification: NSNotification)
{
mainCache.totalCostLimit = 50000
mainCache.countLimit = 50000
}
}
Später habe ich es wie folgt verwendet.
mainCache.setObject(data, forKey: "News")
Und erhalten Sie die Daten zurück wie folgt.
if let news = mainCache.objectForKey("News") as? [AnyObject]
{
}
else
{
// Always here :)
}
Erstellt das nicht nur temporäre 'NSCache'-Instanzen und zerstört sie dann sofort? Verwenden Sie eine Instanzvariable, vielleicht? – trojanfoe