0

I try to get the last modification date of a file:

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
}

I don't understand why the NSDate seems to be released, why the retain does not retain it.

Thank you if you have any idea...

Toto
  • 15
  • 2

2 Answers2

0

You don't need to retain lastModif. I think you might be trying to treat lastModifDiff as an object of some sort when you do an NSLog with it or whatever you do with it afterwards. NSTimeInterval is a typedef to a double so you need to treat it as a double or [NSNumber numberWithDouble:lastModifDiff] if you want to use it like an object.

greg
  • 4,843
  • 32
  • 47
  • I don't do anything with lastModifDiff for the moment, it crashes at allocation, because lastModif seems to be nil according to the debugger. – Toto Mar 24 '10 at 13:38
  • I'm running your code now. I take out the unnecessary release and add an NSLog() after setting lastModifDiff. Both values are set for me. Are you sure your filename is correct? – greg Mar 24 '10 at 13:42
  • Yes, I can load it with NSKeyedUnarchiver, and [fm fileExistsAtPath:filename] is YES. – Toto Mar 24 '10 at 13:47
  • Run the code with the debugger and when it crashes type "where" into the console, maybe that will help us figure out what is going on. I copied and pasted your code into a new Xcode project, putting in a file path for something on disk, and I'm not crashing. Also try a clean build perhaps. – greg Mar 24 '10 at 13:59
  • 1
    Thank you very much, I don't really understand why, but it works now. – Toto Mar 24 '10 at 14:18
0

I'm having the same problem, but this post seemed germane:

NSDate : timeIntervalSinceNow crash

I'm writing a simple set of functions- startClock/endClock -using NSDate to determine FPS in my game loop. Except that timeIntervalSinceNow crashes, claiming that my earlier set NSDate object doesn't exist.

I know for a fact that the NSDate object has a retain count of 1 when I call startClock, but my theory is that NSDate instances are internally rigged to auto-release when they get bored and aren't feeling useful.

Using retain/release to assume ownership of these flighty and ephemeral NSDate objects worked for me.

Community
  • 1
  • 1
CodeOwl
  • 662
  • 2
  • 9
  • 23