在我的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.
答案 0 :(得分:2)
你应该保留appColor并在你的dealloc方法中释放它。您最有可能取消引用错误的指针
Memory Management Programming Guide可以是一个很好的参考
答案 1 :(得分:0)
适合我;)
#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];
}