2010-03-13 76 views
0

我需要一些幫助,所以我會盡我所能解釋。我對這個整天工作,沒有成功(剛學的!)可變範圍問題,iPhone

我:

NSArray *getValue(NSString *iosearch) 
{ 
    mach_port_t   masterPort; 
    CFTypeID    propID = (CFTypeID) NULL; 
    unsigned int   bufSize; 

    kern_return_t kr = IOMasterPort(MACH_PORT_NULL, &masterPort); 
    if (kr != noErr) return nil; 

    io_registry_entry_t entry = IORegistryGetRootEntry(masterPort); 
    if (entry == MACH_PORT_NULL) return nil; 

    CFTypeRef prop = IORegistryEntrySearchCFProperty(entry, kIODeviceTreePlane,  (CFStringRef) iosearch, nil, kIORegistryIterateRecursively); 
    if (!prop) return nil; 

    propID = CFGetTypeID(prop); 
    if (!(propID == CFDataGetTypeID())) 
    { 
     mach_port_deallocate(mach_task_self(), masterPort); 
     return nil; 
    } 

    CFDataRef propData = (CFDataRef) prop; 
    if (!propData) return nil; 

    bufSize = CFDataGetLength(propData); 
    if (!bufSize) return nil; 

    NSString *p1 = [[[NSString alloc] initWithBytes:CFDataGetBytePtr(propData)  length:bufSize encoding:1] autorelease]; 
    mach_port_deallocate(mach_task_self(), masterPort); 
    return [p1 componentsSeparatedByString:@"\0"]; 
} 



- (NSString *) serialnumber 
{ 
    NSArray *results = getValue(@"serial-number"); 
    if (results) return [results objectAtIndex:0]; 
    return nil; 
} 

- (NSString *) backlightlevel 
{ 
    NSArray *results = getValue(@"backlight-level"); 
    if (results) return [results objectAtIndex:0]; 
    return nil; 
} 

我有一個的tableView設置和希望它顯示我的數組,所以我則有:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {............. 
......................................................... 
cell.text = [results objectAtIndex:indexPath.row]; // error results undeclared here 
    return cell; 
} 

在我.h文件中我有:

@interface UIDevice_IOKitExtensionsViewController : UIViewController { 
    IBOutlet UITableView *tblSimpleTable; 

    NSArray *results; 


} 

@property (nonatomic, retain) NSArray *results; 
- (NSString *) serialnumber; 
- (NSString *) backlightlevel; 

的問題是,我得到如上所示未申報的結果。我也無法知道如何獲得序列號和背光級別,以便在點擊按鈕或加載時顯示。我的嘗試已經拋出錯誤,如錯誤:'serialnumber'未聲明(首次在此函數中使用)和警告,如警告:'返回'的值,在函數返回void。很抱歉,很長的問題!

非常感謝, 斯圖爾特

回答

0

你在哪裏聲明results?它確實看起來沒有從你發佈的代碼中聲明。如果你使用它作爲你的數據源,你應該把它設置爲一個ivar。如果你不知道這意味着什麼,如果你想了解iPhone的開發,this是一個很好的開始。

+0

它在我的.h文件中聲明爲NSArray *結果 – Stumf 2010-03-13 17:38:04

+0

你什麼時候設置它?如果它被聲明爲一個ivar,它不會給你一個「結果未聲明」的編譯時錯誤,而是一個「結果未定義」或「未設置」或類似於運行時錯誤的東西。你得到哪個? – 2010-03-13 19:20:01

+0

它沒有聲明,但現在已經排序。當我將display stage或兩個NString方法中的任何一個放在viewDidLoad中或在buttonClick中時,我再次獲得「未聲明」。我可能犯了一個基本錯誤或者誤解了一個概念。 – Stumf 2010-03-13 21:14:05

1

您是否在您的兩個級別方法(serialnumber和backlightlevel)中保留了resutls?例如,序列號應該是:

- (NSString *) serialnumber 
{ 
    NSArray *results = getValue(@"serial-number"); 
    if (results) return [[results objectAtIndex:0] autorelease]; 
    return nil; 
}