2010-03-13 3 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» uneclared (сначала использовать в этой функции) и предупреждения, такие как предупреждение: «return» со значением, в функции, возвращающей void. Извините за длинный вопрос!

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

ответ

0

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

+0

Она объявлена ​​в моем файле .h, как результаты NSArray * – Stumf

+0

Когда вы установить его? Если он объявлен как ivar, он не даст вам «результат необъявленной» ошибки времени компиляции, но «результаты не определены» или «не установлены» или что-то подобное этой ошибке во время выполнения. Что вы получаете? –

+0

Он был необъявлен, но теперь он сортируется. Когда я помещаю этап отображения или любой из двух методов NString в viewDidLoad или в buttonClick, я снова получаю «необъявленный». Я, вероятно, делаю основную ошибку или неправильно понимаю концепцию. – Stumf

1

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

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