2011-10-23 80 views
0

我是一名初學者開發者。我'停止與此錯誤約:Clang LLVM 1.0 Error objective-c

Clang LLVM 1.0 Error 
Expected ':' 

line: [pipe fileHandleForReading availableData] 

任何人都可以幫助我嗎?提前致謝。

- (NSInteger)sizeOfItemAtPath:(NSString*)path { 
    BOOL isdir; 
    [[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isdir]; 
    if (isdir) { 
     NSPipe *pipe = [NSPipe pipe]; 
     NSTask *t = [[[NSTask alloc] init] autorelease]; 
     [t setLaunchPath:@"/usr/bin/du"]; 
     [t setArguments:[NSArray arrayWithObjects:@"-k", @"-d", @"0", path, nil]]; 

     [t setStandardOutput:pipe]; 
     [t setStandardError:[NSPipe pipe]]; 
     [t launch]; 
     [t waitUntilExit]; 

     NSString *sizeString = [[[NSString alloc] initWithData:[[pipe fileHandleForReading availableData] encoding:NSASCIIStringEncoding] autorelease]; 
     sizeString = [[sizeString componentsSeparatedByString:@" "] objectAtIndex:0]; 
     BOOL bytes; 
     bytes = [sizeString longLongValue]*1024; 
    } 
    else { 
     BOOL bytes; 
     bytes = [[[NSFileManager defaultManager] attributesOfItemAtPath:path error:nil] fileSize]; 
    } 
    BOOL bytes; 
    return bytes; 
} 

回答

3

你缺少一個]:它必須是

[[pipe fileHandleForReading] availableData] 

整條生產線需要看起來像這樣:

NSString *sizeString = [[[NSString alloc] initWithData:[[pipe fileHandleForReading] availableData] encoding:NSASCIIStringEncoding] autorelease]; 

而且,你的方法會返回垃圾。這是因爲您已經定義了bytes三次:一次在if分支中,一次在else分支中,一次在封閉方法體中。返回值將取自最後一個,但是這個被初始化。不僅如此,而且您使用的是錯誤的類型:它必須是NSInteger bytes;,而不是BOOL bytes;。您需要將該定義放在該方法的開始位置並刪除所有其他定義,該變量可能只存在一次。

+0

謝謝!我解決了這個問題。 – Giovanni

0

試試這個:

[[pipe fileHandleForReading] availableData]