2010-03-13 8 views
0

J'ai besoin d'aide ici, donc je ferai de mon mieux pour expliquer. Je travaille sur toute la journée et n'a pas eu de succès (seulement à apprendre!)Problème de portée variable, iPhone

Je:

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; 
} 

J'ai un tableView mis en place et que vous souhaitez afficher mon tableau dans si je puis:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {............. 
......................................................... 
cell.text = [results objectAtIndex:indexPath.row]; // error results undeclared here 
    return cell; 
} 

Dans mon fichier .H J'ai:

@interface UIDevice_IOKitExtensionsViewController : UIViewController { 
    IBOutlet UITableView *tblSimpleTable; 

    NSArray *results; 


} 

@property (nonatomic, retain) NSArray *results; 
- (NSString *) serialnumber; 
- (NSString *) backlightlevel; 

Le problème est que j'obtenir des résultats non déclarés comme indiqué ci-dessus. Je ne peux pas non plus comprendre comment je pourrais obtenir le numéro de série et le niveau de rétroéclairage à afficher sur le clic d'un bouton ou même au chargement. Mes tentatives ont renvoyé des erreurs comme error: 'serialnumber' non déclaré (première utilisation dans cette fonction) et des avertissements comme warning: 'return' avec une valeur, dans la fonction return void. Désolé pour la longue question!

Un grand merci, Stuart

Répondre

0

Où vous results déclarer? Cela semble certainement pas déclaré du code que vous avez posté. Si vous l'utilisez comme source de données, vous devriez probablement le définir comme un ivar. Si vous ne savez pas ce que cela signifie, this est un bon point de départ si vous voulez comprendre le développement de l'iPhone.

+0

Il est déclaré dans mon fichier .h que NSArray * Les résultats – Stumf

+0

Lorsque vous définissez-il? Si elle est déclarée comme ivar, elle ne vous donnera pas une erreur de compilation "résultats non déclarés", mais un résultat "résultats indéfinis" ou "non définis" ou quelque chose comme cette erreur au moment de l'exécution. Lequel obtenez-vous? –

+0

C'était non déclaré, mais cela est maintenant trié. Lorsque je mets la scène d'affichage ou l'une des deux méthodes NString dans viewDidLoad ou dans un boutonClick, je suis à nouveau "non déclaré". Je fais probablement une erreur de base ou je comprends mal un concept. – Stumf

1

Avez-vous conserver les Resutls dans vos deux méthodes de niveau de la classe (SerialNumber et backlightlevel)? Par exemple, le numéro de série doit être:

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