NSFileTypeDirectoryはNSString型

if ([dict objectForKey: NSFileType] != NSFileTypeDirectory) continue;

とかやってた。恥ずかしい。NSFileTypeDirectoryは整数値ではなくNSString型だし、そもそもobjectForKey:はその名の通りオブジェクトを返すのだから、!=で比較しても意味ないじゃない。

というわけで正しくは、

if ([[dict objectForKey: NSFileType] isEqualToString: NSFileTypeDirectory]) continue;

となる。