2011-08-04 129 views
0

我在理解如何使用我的核心數據生成NSManagedObject時遇到了問題。核心數據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 

如何將Product添加到Category默認情況下,這些函數(- (void)addMProductObject:(Product *)value等)在我嘗試時不可見:

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

警告:'類別'可能無法響應'-addMProductObject:'

我可以只是在Category.h中聲明這些函數,以便它們可見並正常使用它們?

在xcode 4之前(我認爲),這些函數在.h文件中聲明,我可以使用不帶警告。我相信功能看起來也有點不同。我正在創建一個新的核心數據項目,這對我來說是新的。

回答

2

是的,只是宣佈他們在.h文件。我認爲有一種方法讓Xcode自動將聲明放在那裏...

編輯:是的,您可以將模型編輯器中的關係複製並粘貼到.h文件中。 Source

+0

你救了我的一天。謝謝。 – viral

1

首先,您的addMProductObject沒有在.h文件中定義。 由於該編譯器認爲它的Category類可能不會對它做出響應。

另外,還要注意以下幾點:

您是否使用這個與OS 10.7 SDK? 如果是,也許即使它是iOS 5 beta上的LLVM編譯器,我也沒有檢查,問題可能是這樣的: Category已被作爲SDK中的名稱。 在獅子SDK,字Category在SDK已經被定義(由於存在類的類別中)。

嘗試將類名改爲別的。

+0

感謝您的名稱更改建議。我已經做出這一改變來消除未來的名稱衝突問題。 – binnyb

相關問題