私はNSCache()
が疲れていると思います。これの背後にある問題は何であるか理解できませんでした。 [AnyObject]
〜NSCahce()
の配列を保存しようとしていますが、これは次のコード行を使って行っています。NSCache()が正常に動作していません
NSCache().setObject(data, forKey: "News")
そして、この方法でそれを取り戻そうとしました。
if let news = NSCache()("News") as? [AnyObject]
{
}
else
{
// I am always here :)
}
私はこれに問題があると考えていました。 Googleのビットを検索した後、私はこの設定をtotalCostLimit
とcountLimit
に設定することでこの問題を解決することができます。だから私はこれをこのように設定しました。
NSCache().totalCostLimit = 50000
NSCache().countLimit = 50000
これを設定しても機能しませんでした。だから私はメインスレッドでこのコードを実行することを考えました。私はこのようにしました。
dispatch_async(dispatch_get_main_queue()) {
NSCache().setObject(data, forKey: "News")
}
なお、nil
を返しました。最後に、NSCache()のグローバルインスタンスを1つ作成し、そのインスタンスを使用してこれらの操作をすべて呼び出しました。まあ、そのようにしても期待された結果は得られませんでした。それはいつも私にnil
を与えました。
ここには何が起こっていますか?私はNSCache()
がAnyObject
値を格納できることを知っています。同じプロジェクトに多くの画像を保存していますが、これを保存しようとするとnil
が返されます。
よくこのAnyObject
にはいくつかのカスタムクラスが含まれています。それが問題になることはありますか?はいの場合は、CoreData
またはNSUserdefaults
を使用せずにローカルに保存する方法を教えてください。
どのようにインスタンスをグローバルに作成し、これらにアクセスしましたか。 AppDelegate.swiftファイルにNSCacheの1つのインスタンスを作成したが、AppDelegateクラスの外
let mainCache = NSCache()
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(aNotification: NSNotification)
{
mainCache.totalCostLimit = 50000
mainCache.countLimit = 50000
}
}
後、私はこのようにそれを使用しています。
mainCache.setObject(data, forKey: "News")
このようにデータを戻すと、
if let news = mainCache.objectForKey("News") as? [AnyObject]
{
}
else
{
// Always here :)
}
一時的な 'NSCache'インスタンスを作成してすぐに破棄しないのですか?おそらく、インスタンス変数を使用しますか? – trojanfoe