可变范围问题,iPhone

时间:2010-03-13 02:04:10

标签: iphone objective-c arrays uitableview scope

我需要一些帮助,所以我会尽力解释。我整天都在努力,但没有成功(只是学习!)

我有:

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和backlightlevel。我的尝试抛出了错误,如错误:'serialnumber'未声明(在此函数中首次使用)和警告如警告:'return'带有值,函数返回void。很抱歉这个问题很长!

非常感谢, 斯图尔特

2 个答案:

答案 0 :(得分:1)

您是否在两个级别方法(序列号和背光级别)中保留了结果?例如,序列号应为:

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

答案 1 :(得分:0)

你在哪里宣布results?它确实看起来未发布你发布的代码。如果您将其用作数据源,则应将其设置为ivar。如果你不知道这意味着什么,this是一个很好的起点,如果你想了解iPhone的发展。