Holen Sie sich exec_bad_access, wenn ich die NSFilemodificificationDate erhalte
-
22-09-2019 - |
Frage
Ich versuche das letzte Änderungsdatum einer Datei zu erhalten:
NSFileManager *fm = [[NSFileManager alloc] init];
NSError *err;
NSDate *lastModif = [[fm attributesOfItemAtPath:filename error:&err] objectForKey:NSFileModificationDate];//filename is ok ;-)
if(err == nil) {
[lastModif retain];
//I can put a NSLog of lastModif here, it works !!
NSTimeInterval lastModifDiff = [lastModif timeIntervalSinceNow];//crash here
}
Ich verstehe nicht, warum das NSDate veröffentlicht zu werden scheint, warum der Rückhalt sie nicht behält.
Vielen Dank, wenn Sie eine Idee haben ...
Lösung
Sie müssen nicht behalten lastModif
. Ich denke, Sie könnten versuchen zu behandeln lastModifDiff
Als Objekt irgendeiner Art, wenn Sie ein NSlog damit machen oder was auch immer Sie danach damit machen. NSTimeInterval
ist ein typedef zu einem doppelten [NSNumber numberWithDouble:lastModifDiff]
Wenn Sie es wie ein Objekt verwenden möchten.
Andere Tipps
Ich habe das gleiche Problem, aber dieser Beitrag schien zu deutlich zu sein:
NSDate: TimeIntervalsinzenow Crash
Ich schreibe eine einfache Reihe von Funktionen - StartClock/Endclock - Verwenden von NSDate, um FPS in meiner Spielschleife zu bestimmen. Abgesehen von diesem TimeIntervalsincenow stürzt und behauptet, mein früherer NSDate -Objekt gibt es nicht.
Ich weiß, dass das NSDATE-Objekt eine Rücksichtnahme von 1 hat, wenn ich StartClock nenne, aber meine Theorie ist, dass NSDate-Instanzen intern zur automatischen Veröffentlichung manipuliert sind, wenn sie sich langweilen und sich nicht nützlich fühlen.
Verwenden von Rückhalt/Veröffentlichung, um das Eigentum dieser fliegenden und kurzlebigen NSDate -Objekte zu übernehmen, funktionierten für mich.