Проблема с переменной областью, iPhone - PullRequest
0 голосов
/ 13 марта 2010

Мне нужна помощь, поэтому я сделаю все возможное, чтобы объяснить. Я работал над этим весь день и не имел успеха (только учусь!)

У меня есть:

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;

Проблема в том, что я получаю необъявленные результаты, как указано выше. Я также не могу понять, как я могу получить серийный номер и уровень подсветки для отображения при нажатии кнопки или даже при загрузке. Мои попытки отбросили ошибки, такие как error: 'serialnumber' undeclared (первое использование в этой функции) и предупреждения, такие как предупреждение: 'return' со значением, в функции return void. Извините за длинный вопрос!

Большое спасибо, Стюарт

Ответы [ 2 ]

1 голос
/ 15 июня 2010

Сохраняли ли вы результаты в двух ваших методах уровня класса (serialnumber и backlightlevel)? Например, серийный номер должен быть:

- (NSString *) serialnumber
{
  NSArray *results = getValue(@"serial-number");
  if (results) return [[results objectAtIndex:0] autorelease];
  return nil;
}
0 голосов
/ 13 марта 2010

Где вы декларируете results? Это, конечно, выглядит необъявленным из кода, который вы публикуете. Если вы используете его в качестве источника данных, вам, вероятно, следует установить его в виде ивара. Если вы не знаете, что это значит, , это - хорошее место для начала, если вы хотите понять разработку iPhone.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...