0

本で見つけたプロジェクトに問題があります。画面をタップすると、プロジェクトがさまざまな形でポップします。私の問題は、例外が作成されることです。問題は 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 を追加しました

4

1 に答える 1

0

以下のように 1 つのプロパティを宣言します。retain

@property (nonatomic, retain) UIColor *color;

& 次に割り当てる

shape.color=[self makeRandomColor]; 
于 2013-01-26T05:38:35.363 に答える