Finder のプレビューや情報パネルと同じように、アプリに「最後に開いた」日付を表示したいと考えています。ただし、これは取得する最終アクセス日と同じではないことに気付きました
NSDate* lastAccessDate = [fileUrl resourceValuesForKeys:@[NSURLContentAccessDateKey] error:NULL][NSURLContentAccessDateKey];
または
struct stat buf;
stat(curName, &buf);
time_t lastAccessDate = buf.st_atimespec.tv_sec;
これらは Unix の最終アクセス時刻を返します。これは Terminal にも表示されls -l
ますが、Finder には別の値が表示されます。これは、ユーザーがファイルを開いたとき (ダブルクリックなど) にのみ変更されます。
「本当の「最後に開いた」日付を取得しますか?」という投稿を読みました。および 「「最後に開いた」日付」ですが、これらは解決しませんでした。彼らは次のようなものをお勧めします
MDItemRef itemRef = MDItemCreateWithURL(NULL, (__bridge CFURLRef)fileUrl);
NSArray *attributeNames = (__bridge NSArray *)MDItemCopyAttributeNames(itemRef);
NSDictionary *attributes = (__bridge NSDictionary *) MDItemCopyAttributes(itemRef, (__bridge CFArrayRef) attributeNames);
CFDateRef lastUsedCfDate = MDItemCopyAttribute(itemRef, kMDItemLastUsedDate);
NSDate* lastUsedDate = (__bridge NSDate*) lastUsedCfDate;
CFRelease(itemRef);
しかしattributeNames
、値はありませんkMDItemLastUsedDate
。私の場合、その配列には正確に 24 個の値がありますが、最後に使用する値はありません。そうlastUsedDate
ですnil
...
また、最後に開いた日付にアクセスするための高レベル API が本当にないのではないかと思います。