Pracuję nad metodą, która identyfikuje rozniecenie z innych zamontowanych dysków na mac użytkowników. Jeśli kindle nie można zidentyfikować po nazwie, moja aplikacja zdecyduje, który zamontowany dysk jest kindle, przeglądając i znajdując dysk zawierający typy plików, których używa kindle (np. .prc, .azw, .mobi, .mbp, itp. ). Oto kod:
NSLog(@"Scanning every file");
NSMutableArray *mountedDisks = [[NSMutableArray alloc] init];
mountedDisks = [workspace mountedRemovableMedia];
NSMutableArray *subpaths = [[NSMutableArray alloc] init];
int currentSubpath;
int proprietaryFilesFound;
while ([mountedDisks count] > currentDisk && [mountedDisks count] != 0)
{
subpaths = [manager subpathsAtPath:[mountedDisks objectAtIndex:currentDisk]];
currentSubpath = 0;
proprietaryFilesFound = 0;
NSLog(@"Entered outer loop");
while ([subpaths count] > currentSubpath && [subpaths count] != 0 && [[[manager attributesOfFileSystemForPath:[mountedDisks objectAtIndex:currentDisk] error:NULL] objectForKey:NSFileSystemSize] longLongValue] / 1073741824 <= 5 && proprietaryFilesFound < 7)
{
NSLog(@"Scanning %@, filetype is %@", [subpaths objectAtIndex:currentSubpath], [[manager attributesOfItemAtPath:[subpaths objectAtIndex:currentSubpath] error:NULL] objectForKey:NSFileType]);
if ([[[manager attributesOfItemAtPath:[subpaths objectAtIndex:currentSubpath] error:NULL] objectForKey:NSFileType] isEqual: @"azw"] || [[[manager attributesOfItemAtPath:[subpaths objectAtIndex:currentSubpath] error:NULL] objectForKey:NSFileType] isEqual: @"mbp"] || [[[manager attributesOfItemAtPath:[subpaths objectAtIndex:currentSubpath] error:NULL] objectForKey:NSFileType] isEqual: @"prc"] || [[[manager attributesOfItemAtPath:[subpaths objectAtIndex:currentSubpath] error:NULL] objectForKey:NSFileType] isEqual: @"mobi"])
{
proprietaryFilesFound++;
NSLog(@"Proprietary file found");
}
currentSubpath++;
}
currentDisk++;
}
Niestety, gdy uruchamiam następujący wiersz kodu, zwracana jest wartość NULL.
[[manager attributesOfItemAtPath:[subpaths objectAtIndex:currentSubpath] error:NULL] objectForKey:NSFileType]
Pracowałem z C++ od dłuższego czasu, ale jestem całkiem nowy w obiektywnym c i kakao, więc każda pomoc byłaby bardzo wdzięczna i z góry przepraszam, jeśli jest to bezsensowne pytanie.
2 odpowiedzi
Zamiast przekazywać NULL
do parametru błędu, przekaż wskaźnik do NSError
i zobacz, jaki błąd otrzymasz. Na przykład:
NSError *error;
[[manager attributesOfItemAtPath:[subpaths objectAtIndex:currentSubpath] error:&error] objectForKey:NSFileType];
NSLog(@"%@", error);
Proponuję sprawdzić zmienną "currentSubpath", podczas manipulowania ciągami ścieżek łatwo zapomnieć o (świętym) ukośniku...
Podobne pytania
Nowe pytania
objective-c
Tego znacznika należy używać tylko w przypadku pytań dotyczących funkcji Objective-C lub zależnych od kodu w języku. Tagi [cocoa] i [cocoa-touch] powinny być używane, aby zapytać o ramy lub klasy Apple. Użyj powiązanych tagów [ios], [macos], [apple-watch] i [tvos] w przypadku problemów specyficznych dla tych platform.
enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:
(NSFileManager
)