NSFileTypeDirectoryはNSString型
if ([dict objectForKey: NSFileType] != NSFileTypeDirectory) continue;
とかやってた。恥ずかしい。NSFileTypeDirectoryは整数値ではなくNSString型だし、そもそもobjectForKey:はその名の通りオブジェクトを返すのだから、!=で比較しても意味ないじゃない。
というわけで正しくは、
if ([[dict objectForKey: NSFileType] isEqualToString: NSFileTypeDirectory]) continue;
となる。