Frage

In meinem iPhone app habe ich ein appSettings.plist. Dies ermöglicht es mir, aber andere auch einfach einige Parameter zu ändern. Einer der Parameter ist die vorherrschende Farbe der App. Die .plist sieht wie folgt aus:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>Red</key>
 <integer>255</integer>
 <key>Green</key>
 <integer>123</integer>
 <key>Blue</key>
 <integer>124</integer>
 <key>compositeRGB</key>
</dict>
</plist>

In meinem Code, las ich diese Datei, und versuchen, eine UIColor aus diesen drei Zahlen zu machen. Ich muss zugeben, dass ich nicht weiß, zu viel über CGFLoats, und ich vermute, dass die Ursache meiner Probleme ist. Das ist, was ich tue:

-(void)readAppSettings
{
 NSString *path = [[NSBundle mainBundle] bundlePath];
 NSString *finalPath = [path stringByAppendingPathComponent:@"appSettings.plist"];
 NSDictionary *plistDictionary = [[NSDictionary dictionaryWithContentsOfFile:finalPath] retain];

 unsigned int RedComponent = [[plistDictionary objectForKey:@"Red"]intValue];
 unsigned int GreenComponent = [[plistDictionary objectForKey:@"Green"]intValue];
 unsigned int BlueComponent = [[plistDictionary objectForKey:@"Blue"]intValue];

 appColor = [UIColor colorWithRed: ((float) RedComponent / 255.0f) 
          green: ((float) GreenComponent / 255.0f) 
        blue:((float) BlueComponent / 255.0f)
          alpha:1.0f];
}

, wenn ich zu verwenden versuchen appColor als UIColor, meine App abstürzt, mit dem folgenden Fehler:

'- [__ NSCFArray CGColor]: Unbekannter Selektor an Instanz gesendet 0x7b0ab20'

Could somebody explain to me what I'm doing wrong. You don't have to be polite.
War es hilfreich?

Lösung

Sie sollten appColor behalten und lassen Sie sich in Ihrer dealloc Methode. Sie dereferencing einen schlechten Zeiger am wahrscheinlichsten

Das Memory Management Programming Guide kann eine gute Referenz

Andere Tipps

Arbeiten für mich;)

#import <UIKit/UIKit.h>

@interface deleteColorAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    UINavigationController *navigationController;
    UIColor *appColor;
}

@property (nonatomic, retain) UIColor *appColor;

@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;

-(UIColor*)readAppSettings;

@end


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.
    // Add the navigation controller's view to the window and display.

    [self readAppSettings];
    UILabel *label = [[UILabel alloc] init];
    label.textColor = appColor;
    label.text = @"This is a test";
    label.frame = CGRectMake(100, 100, 100, 40);

    [navigationController.view addSubview:label];
    [window addSubview:navigationController.view];
    [window makeKeyAndVisible];
    [label release];
    return YES;
}

- (void)applicationWillTerminate:(UIApplication *)application {

    // Save data if appropriate.


}

-(UIColor*)readAppSettings
{
    NSString *path = [[NSBundle mainBundle] bundlePath];
    NSString *finalPath = [path stringByAppendingPathComponent:@"appSettings.plist"];
    NSDictionary *plistDictionary = [[NSDictionary dictionaryWithContentsOfFile:finalPath] retain];

    float RedComponent = [[plistDictionary objectForKey:@"Red"]floatValue] / 255.0f ;
    float GreenComponent = [[plistDictionary objectForKey:@"Green"]floatValue] / 255.0f ;
    float BlueComponent = [[plistDictionary objectForKey:@"Blue"]floatValue] / 255.0f ;

    appColor = [UIColor colorWithRed:   RedComponent  
                               green:   GreenComponent 
                                blue:   BlueComponent 
                               alpha:   1.0f];
    return [appColor retain];
}



- (void)dealloc {
    [appColor release];
    [window release];
    [navigationController release];
    [super dealloc];
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top