Du bist nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: OS X Entwicklerforum. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

1

Sonntag, 11. März 2012, 01:37

Hilfe Core Data Problem Relationen und die Objekte 1 zu n zu 1 oder so

Hallo Profis,

ich bin echt am verzweifeln und hoffe das Ihr mir weiterhelfen könnt.
Folgende Ausgangssituation:
Mit dem Core Data Editor habe ich drei Entitäten User, User Aboniert Tags und Tags aufgebaut.
Die Relationen zueinander sind folgende:
User hat einen 1 zu n Beziehung zu User Aboniert Tags.
Die Umkehrrelation ist einen 1 zu 1.

User Aboniert Tags hat eine 1 zu 1 Beziehung zu Tag
Und Tag natürlich auch nur 1 zu 1 Beziehung zu User Abonier Tags

Nun habe ich UserAboniertTags Objekte erstellt und habe jeden von Ihnen ein Objekt von Tag zugewiesen.

Wiederum habe ich Objekte von User Aboniert Tags dem User Objekt hinzugewiesen.

Wie kann ich jetzt auf die Tag Objekte die User Abo Tags zugewiesen wurden zugreifen?
1 n 1 1
User--->userAboTags--------> Tags

Mein bisheriger gescheiterter Lösungsansatz sah folgendes vor:

Ich habe versucht über den User mich runter zu hangeln
user ist bereits initialisiert..

NSSet* allUserHasAboTags = [user has_abo_group];
NSArray* allHasAboTags = [allUserHasAboTags allObjects];



Wie kann ich jetzt auf die zugewiesenen Tag Objekte von dem NSArray allHasAboTags zugreifen....
der NSArray enthält ja bereits die zugewiesenen UserAboTag Objekte aber wie auf die Tag Objekte?


Hier Übrigens die Models
@property (nonatomic, retain) NSString * forename;
@property (nonatomic, retain) NSDate * lastlogin;
@property (nonatomic, retain) NSString * password;
@property (nonatomic, retain) NSString * surname;
@property (nonatomic, retain) NSString * user_id;
@property (nonatomic, retain) NSString * username;
@property (nonatomic, retain) NSSet *has_abo_group;
@property (nonatomic, retain) NSSet *user_abo_tags;
@end

@interface User (CoreDataGeneratedAccessors)

- (void)addUser_abo_tagsObject:(UserAboTags *)value;
- (void)removeUser_abo_tagsObject:(UserAboTags *)value;
- (void)addUser_abo_tags:(NSSet *)values;
- (void)removeUser_abo_tags:(NSSet *)values;


@interface UserAboTags : NSManagedObject

@property (nonatomic, retain) NSNumber * isSync;
@property (nonatomic, retain) NSString * tag_id;
@property (nonatomic, retain) NSString * user_id;
@property (nonatomic, retain) NSString * userabotag_id;
@property (nonatomic, retain) Tag *has_tag;
@property (nonatomic, retain) User *has_user;

@end


@class UserAboTags;

@interface Tag : NSManagedObject

@property (nonatomic, retain) NSString * comment;
@property (nonatomic, retain) NSNumber * isSync;
@property (nonatomic, retain) NSString * tag;
@property (nonatomic, retain) NSString * tag_id;
@property (nonatomic, retain) UserAboTags *is_user_abo_tags;

@end


Über eine Hilfe eurer Seits wäre ich echt dankbar und es ist wirklich eine Herausforderung... ich muss leider diesen Zwischenschritt machen und Entität userhasAboTags erzeugen um die Relationen mit einer SQL Datenbank zu speichern. :cursing:

2

Sonntag, 11. März 2012, 02:06

Ich glaube ich habs jetzt, zuerst über ein NSSet die ganzne abonierten Objekte von USer ausgeben lassen dann in einem Array speichern und dann per for schleife diecObjekte einzeln abfragen und als tag OBjekt ausgeben... Hmm jetzt muss ich das aber noch in einer TableView bekommen hat da jemand vorschläge?
Oder kann ich ein NSArray zurück geben aber tausendmal lieber wäre mir ein FetchedResulstscontroller...

NSSet* allUserHasAbo = [user user_abo_tags];
NSArray *allUserTags = [allUserHasAbo allObjects];
NSLog(@"nsaray %d",[allUserTags count]);
for(int i =0;i< [allUserTags count];i++){
UserAboTags *abotag = [allUserTags objectAtIndex:i];
tag = [abotag has_tag];
NSLog(@"tag description %@",[tag comment]);
NSLog(@"Tag %@ Description",tag);

3

Sonntag, 11. März 2012, 16:32

Ich fürchte, ich verstehe die Frage nicht oder zumindest nicht richtig.

Du hast einen User gemäß deines Bauplans.
has_abo_group finde ich persönlich missverständlich gewählt, das klingt für mich nach nem Wahrheitswert statt nach ner Liste von Abo-Gruppen...
Also benutze ich jetzt has_abo_group als aboGroups (nämlich genau das, was man zurück bekommt: ne Liste von [einer oder mehreren] Abogruppen),
has_tag als tag, has_user als user und is_user_abo_tag als userAboTag.

Also hört dein User auf

C/C++-Quelltext

1
[user aboGroups];


Dann hast du plötzlich ein NSSet von Abogruppen, die (ein vernünftiges Modell vorausgesetzt) nur die Abogruppen des Users beinhalten.
Nun kannst du diese schleifen.

C/C++-Quelltext

1
2
3
4
for(UserAboTag * currentAboTag in [user aboGroups])
{
   NSLog(@"Current tag: %@", [[currentAboTag tag] tagID]);
}


Es ist also genau so, als hättest du die Objekte von Hand gebaut.

Warum willst du unbedingt mit einem FetchedResultsController arbeiten?
Auf dem iPhone gibt es meines Wissens keine Bindings, also nimm einfach eine Datasource für dein TableView.

Das Schöne an der Datasource ist ja, dass es der Tabelle wurscht ist in welchem Format du die Daten hinterlegst. Hauptsache, sie bekommt, was sie anfragt.
Ziemlich komplex zu erklären, schau dir mal die Dokumentation dazu an:
https://developer.apple.com/library/ios/…PIOverview.html
Hilfreich? Dann freue ich mich über eine kleine Spende. :) Flattr this
----
«Applejack» "Don't you use your fancy mathematics to muddle the issue!"
----

4

Dienstag, 13. März 2012, 09:36

Danke dir für deine schnelle Antwort.
Ich probier das mal aus mit dem durchschleifen von den Objekten.
Gruß Michael

Beiträge: 19 427

Wohnort: Köln

Beruf: Rechtsanwalt

Hobbys: FSK18

  • Private Nachricht senden

5

Dienstag, 13. März 2012, 10:00

Die Umkehrrelation von 1-zu-N ist N-zu-1.

Du verwechselst damit To-Many und Master-Detail.
Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
verhindert man die Leaks, so verhindert man auch die Begrenzung auf 128 Abfragen

Ähnliche Themen

Social Bookmarks