本で見つけたプロジェクトに問題があります。画面をタップすると、プロジェクトがさまざまな形でポップします。私の問題は、例外が作成されることです。問題は createShapeAt 内の行にあると思います。
NSInvalidArgumentException では、プロパティは updateAllShapes にあります。必要なタイプの NSString が必要ですが、出力のタイプは UIDeviceRGBColor です。私は正しいですか?
例外があります:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unacceptable type of value for attribute: property = "color"; desired type = NSString; given type = UIDeviceRGBColor; value = UIDeviceRGBColorSpace 0.0980392 0.0705882 0.152941 1.'
コード:
- (void)createShapeAt:(CGPoint)point
{
Shape *shape = nil;
int type = arc4random() % 2;
if (type == 0) {
shape = [Circle randomInstance:point inContext:self.managedObjectContext];
}
else {
shape = [Polygon randomInstance:point inContext:self.managedObjectContext];
}
NSLog(@"Test: %@", [[self makeRandomColor] description]);
shape.color = [self makeRandomColor]; //This is where the Exception kicks in.
}
- (UIColor *)makeRandomColor
{
float red = (arc4random() % 256) / 255.0;
float green = (arc4random() % 256) / 255.0;
float blue = (arc4random() % 256) / 255.0;
return [UIColor colorWithRed:red green:green blue:blue alpha:1.0];
}
- (void)updateAllShapes
{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Shape" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSArray *shapes = [managedObjectContext executeFetchRequest:fetchRequest error:nil];
for (NSManagedObject *shape in shapes) {
[shape setValue:[self makeRandomColor] forKey:@"color"];
}
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
シェイプ.h
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@class Canvas;
@interface Shape : NSManagedObject
@property (nonatomic, retain) UIColor *color;
@property (nonatomic, retain) NSSet *canvases;
@end
@interface Shape (CoreDataGeneratedAccessors)
- (void)addCanvasesObject:(Canvas *)value;
- (void)removeCanvasesObject:(Canvas *)value;
- (void)addCanvases:(NSSet *)values;
- (void)removeCanvases:(NSSet *)values;
@end
形状.m
#import "Shape.h"
#import "Canvas.h"
@implementation Shape
@dynamic color;
@dynamic canvases;
@end
コンソール:
Test: UIDeviceRGBColorSpace 0.0431373 0.764706 0.223529 1
このコード行を変更するにはどうすればよいですか: shape.color = [self makeRandomColor];
NSString になるには?
編集: Shape.h と Shape.m を追加しました