开发者

core data NSManagedObject generated functions

I'm having a problem understanding how to use my core data generated NSManagedObject.

Category.h:

@class Product;

@interface Category : NSManagedObject {
@private
}
@property (nonatomic, retain) NSString * mName;
@property (nonatomic, retain) NSSet* mProduct;
@end

Category.m:

#import "Category.h"
#import "Product.h"

@implementation Category
@dynamic mName;
@dynamic mProduct;


- (void)addMProductObject:(Product *)value {    
    NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
    [self willChangeValueForKey:@"mProduct" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
    [[self primitiveValueForKey:@"mProduct"] addObject:value];
    [self didChangeValueForKey:@"mProduct" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
    [changedObjects release];
}

- (void)removeMProductObject:(Product *)value {
    NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
    [self willChangeValueForKey:@"mProduct" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
    [[self primitiveValueForKey:@"mProduct"] removeObject:value];
    [self didChangeValueForKey:@"mProduct" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
    [changedObjects release];
}

- (void)addMProduct:(NSSet *)value {    
    [self willChangeValueForKey:@"mProduct" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value];
    [[self primitiveValueForKey:@"mProduct"] 开发者_运维问答unionSet:value];
    [self didChangeValueForKey:@"mProduct" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value];
}

- (void)removeMProduct:(NSSet *)value {
    [self willChangeValueForKey:@"mProduct" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value];
    [[self primitiveValueForKey:@"mProduct"] minusSet:value];
    [self didChangeValueForKey:@"mProduct" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value];
}


@end

How do I add a Product to a Category? By default, these functions(- (void)addMProductObject:(Product *)value, etc) aren't visible when i try this:

Product *product = (Product*)[NSEntityDescription insertNewObjectForEntityForName:@"Product" inManagedObjectContext:[self managedObjectContext]];;
...
Category *cat = (Category*)[NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:[self managedObjectContext]];
...
[cat addMProductObject:product];

warning: 'Category' may not respond to '-addMProductObject:'

Can i just declare these functions in Category.h so they are visible and use them normally?

Before xcode 4(i think), these functions were declared in the .h file and i could use the without warnings. I believe the functions looked a bit different too. I am creating a new core data project and this is new to me.


Yes, just declare them in the .h file. I think there's a way to have Xcode put the declarations there automatically...

Edit: Yup, you can just copy-and-paste the relationships from the model editor to your .h file. Source


First of all, your addMProductObject is not defined in the .h file. Because of that compiler thinks that it the Category class might not respond to it.

Also, note the following:

Are you using this with OS 10.7 SDK? If yes, maybe even if it's LLVM compiler on iOS 5 beta, I didn't check that, the problem could be that: Category is already taken as a name in the SDK. In Lion SDK, the word Category is already defined in the SDK (since there are class categories).

Try changing class name to something else.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜