在我的iPhone应用程序中,我有一个appsettings.plist。这使我,但其他人也可以简单地更改一些参数。参数之一是应用程序的主要颜色。 .plist看起来像这样:

<?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>

在我的代码中,我读取此文件,并尝试使这三个数字中的uicolor。我必须承认,我对cgfloats不太了解,我怀疑这是我麻烦的原因。这就是我要做的:

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

每当我尝试使用 appColor 作为uicolor,我的应用程序崩溃,并带有以下错误:

' - [__ NSCFARRAY CGCOLOR]:未识别的选择器发送到实例0x7B0AB20'

Could somebody explain to me what I'm doing wrong. You don't have to be polite.
有帮助吗?

解决方案

您应该保留AppColor并以DealLoc方法发布。您正在提出一个糟糕的指针

内存管理编程指南 可以是一个很好的参考

其他提示

为我工作;)

#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];
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top