【问题标题】:Variable Scope Problem, iPhone可变范围问题,iPhone
【发布时间】:2010-03-13 02:04:09
【问题描述】:

我在这里需要一些帮助,所以我会尽力解释。我已经为此工作了一整天,但没有成功(只是学习!)

我有:

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' undeclared(首次在此函数中使用)和警告之类的警告:'return' with a value, in function return void。抱歉问了这么长的问题!

非常感谢, 斯图尔特

【问题讨论】:

    标签: iphone objective-c arrays uitableview scope


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 它在我的 .h 文件中声明为 NSArray *results
      • 什么时候设置?如果它被声明为 ivar,它不会给您“未声明的结果”编译时错误,而是在运行时出现“未定义的结果”或“未设置”或类似的错误。你要的是哪个?
      • 它未声明,但现在已排序。当我将显示阶段或两个 NString 方法中的任何一个放在 viewDidLoad 或 buttonClick 中时,我再次得到“未声明”。我可能犯了一个基本错误或误解了一个概念。
      • 您是在尝试将方法用作变量,还是实际调用它们? [self serialNumber] 或只是serialNumber
      • 我没有使用 [self serialNumber],应该是吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 2011-08-23
      • 2016-08-30
      相关资源
      最近更新 更多