2011-10-23 55 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]