2010-03-13 103 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; 
}