• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Programmieren mit XCode

  • Ersteller severus
  • Erstellt am

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.059
Bitte lies den Thread.
Habe ich getan. Ich wollte nur deine sonderbare Vorstellung korrigieren Primärschlüssel aus Sequenzen müßten eine fortlaufende Nummer haben. Sequenzen liefern neue eindeutige Werte für den Primärschlüssel, mehr nicht. Es ist nirgends garantiert, daß das fortlaufende Werte sind. Auch bei der direkten Benutzung eines RDBMS verböte sich es von selbst, den Primärschlüssel als Identifikation für die Nutzer zu verwenden, man sollte das als rein interne Größe handhaben. Wie etwa die Zeiger innerhalb einer Applikation oder den OIDs, wenn Objektgraphen in Datenbanken abgelegt werden.
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Ich wollte nur deine sonderbare Vorstellung korrigieren.

Zumindest sind tjp und ich uns also einig, dass der TE keinen Primärschlüssel will... oder sehe ich das falsch?
Können wir uns dann alle doch darauf einigen, dass der TE einfach ein Datum aus der Realen Welt™ so bequem wie möglich abbilden möchte?

Alex
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Solltest du ihn gelesen haben, dann tut mir das wirklich außerordentlich leid.

Ich hatte nicht die Vorstellung, dass Primärschlüssel eine Sequenz sind. Ich hatte sogar ausdrücklich gesagt, dass Lücken entstehen können.

Soll ich es noch mit Ausdruckstanz probieren?
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Zumindest sind tjp und ich uns also einig, dass der TE keinen Primärschlüssel will... oder sehe ich das falsch?
Können wir uns dann alle doch darauf einigen, dass der TE einfach ein Datum aus der Realen Welt™ so bequem wie möglich abbilden möchte?
Jo und die einfachste Abbildung des Datums ist … das Datum?
 

kybdf2

Rheinischer Winterrambour
Registriert
10.02.06
Beiträge
923
Was hab ich denn jetzt hier angerichtet?
Alles was ich will ist folgendes:
wird ein neuer Flug hinzugefügt, erhält dieser eine Nummer. Diese Nummer ist die des vorherigen Fluges + 1. Somit hat der erste Flug, der jemals in dieses Flugbuch eingetragen wird die Nummer 0, der nächste die 1 usw.
Ich verstehe ehrlich gesagt nicht, was daran so sinnlos sein soll und warum man es sich unbedingt komplizierter machen muss als nötig.
Diese Nummer hat auch nichts mit der internen Programmstruktur zu tun, das ist mir wohl bewusst. Sie soll einfach nur da sein...in der ersten Spalte...dort stört sie keinen...ist ganz lieb... :)
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Was hab ich denn jetzt hier angerichtet?
Alles was ich will ist folgendes:
wird ein neuer Flug hinzugefügt, erhält dieser eine Nummer. Diese Nummer ist die des vorherigen Fluges + 1. Somit hat der erste Flug, der jemals in dieses Flugbuch eingetragen wird die Nummer 0, der nächste die 1 usw.
Ich verstehe ehrlich gesagt nicht, was daran so sinnlos sein soll und warum man es sich unbedingt komplizierter machen muss als nötig.
Diese Nummer hat auch nichts mit der internen Programmstruktur zu tun, das ist mir wohl bewusst. Sie soll einfach nur da sein...in der ersten Spalte...dort stört sie keinen...ist ganz lieb... :)
Die Möglichkeiten, einen solchen Index zu erzeugen, sind ja hier eingehend erörtert worden. Da du ihn intern gar nicht verwendest – für Sortierung braucht man so etwas manchmal –, ist es eben die einfachste Möglichkeit, ihn nicht zu erzeugen. Und jede unnötige Information auf dem Bildschirm stört.

Es gibt einfach keinen Grund, dass du jetzt dies implementierst.
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Da du ihn intern gar nicht verwendest – für Sortierung braucht man so etwas manchmal –, ist es eben die einfachste Möglichkeit, ihn nicht zu erzeugen.

Öhhhmmmm.... ich verwende viele Daten von meinem Adressbuch nicht intern.

Nur der TE kann entscheiden, welche Daten angezeigt werden sollen, und welche nicht.

Alex
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Öhhhmmmm.... ich verwende viele Daten von meinem Adressbuch nicht intern.
das ist schön, Alex,ich pinkele auch manchmal meinen Namen in den Schnee – okay, zuletzt in den 't Zand.

Aber was war gleich seine Verwendung dafür?

Nur der TE kann entscheiden, welche Daten angezeigt werden sollen, und welche nicht.
Und nur der OP kann eine Frage stellen, ob das sinnvoll ist. Und nur wir können das beantworten. Oder anders formuliert:
Ja, wir können nur zum Sinn schreiben,nicht zu seinen Vorschriften.
 

kybdf2

Rheinischer Winterrambour
Registriert
10.02.06
Beiträge
923
Nehmen wir doch mal iTunes als Beispiel. Wenn man da eine Wiedergabeliste erstellt und Songs hinzufügt, kriegen die auch ne Nummer. Sowas will ich auch ;)

EDIT: Sorry, dass ich hier länger nicht mehr gepostet habe, aber war zu beschäftigt.
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Nehmen wir doch mal iTunes als Beispiel. Wenn man da eine Wiedergabeliste erstellt und Songs hinzufügt, kriegen die auch ne Nummer. Sowas will ich auch ;)
Zu der Anwendung Sortierung hatten wir ja schon. Aber das ist nicht der Pnkt. Wernn du dir gerade iTunes anschaust, siehst du in der Bibliothek, dass die Sortierung eben gerade kein Attribut des Songtitels ist. Vielmehr ist das zu den Einträgen einer Wiedergabeliste gespeichert, muss auch dort gespeichert sein. Ganz andere Entitt.

EDIT: Sorry, dass ich hier länger nicht mehr gepostet habe, aber war zu beschäftigt.
Ach, so etwas kommt in Foren vor.
 

kybdf2

Rheinischer Winterrambour
Registriert
10.02.06
Beiträge
923
Zu der Anwendung Sortierung hatten wir ja schon. Aber das ist nicht der Pnkt. Wernn du dir gerade iTunes anschaust, siehst du in der Bibliothek, dass die Sortierung eben gerade kein Attribut des Songtitels ist. Vielmehr ist das zu den Einträgen einer Wiedergabeliste gespeichert, muss auch dort gespeichert sein. Ganz andere Entitt.


Ach, so etwas kommt in Foren vor.

OK, und ich möchte genau EINE "Wiedergabeliste" in diesem Programm haben und diese eine Liste soll IMMER sortiert sein nach dem Attribut "Nummer". Mehr brauche/will ich nicht ;)
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
OK, und ich möchte genau EINE "Wiedergabeliste" in diesem Programm haben und diese eine Liste soll IMMER sortiert sein nach dem Attribut "Nummer". Mehr brauche/will ich nicht ;)
a) Das ist hier schon besprochen.
b) Es ist immer noch nicht sinnvoll.
 

kybdf2

Rheinischer Winterrambour
Registriert
10.02.06
Beiträge
923
a) Das ist hier schon besprochen.
b) Es ist immer noch nicht sinnvoll.

OK, habe jetzt mal eine ganz andere Frage:

Gibt es eine Möglichkeit folgendes zu bewerkstelligen?

Es gibt Flugzeugkennzeichen, die wie folgt aussehen:
D-EXXI
Und es gibt so genannte Kurzkennzeichen, die nur aus den letzten beiden Buchstaben des vollen Kennzeichens bestehen, in diesem Fall wäre das:
XI

Gibt es eine Möglichkeit, dass man in ein Texteingabefeld (NSTextField) nur ein Kurzkennzeichen eingibt und sobald man mit Tabulator das Feld verlässt, das eingegebene Kurzkennzeichen mit einer Liste, bestehend aus den Kurzkennzeichen und den vollen Kennzeichen, verglichen wird und dann anstelle des eingegebenen Kurzkennzeichens das entsprechende volle Kennzeichen eingefügt wird?
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Ja :)

Es gibt verschiedene Möglichkeiten. In deinem Falle würde ich an diese denken:

a) KVV:
Code:
Key-Value-Validation
Cocoa definiert ebenso Methoden -validateValue:forKey:error:  und -validateValue:forKeyPath:error: , die ihrerseits eine Methode -validateEigenschaft:error: für die Überprüfung in der jeweiligen Klasse aufrufen. 
Die entsprechende Validierungsmethode bekommt einen Vorschlag über ihren ersten Parameter und liefert bis zu zwei Werte zurück. Dabei sind drei Fälle zu unterscheiden:
•	Über den ersten Parameter erhält die Methode den Vorschlag, insbesondere also eine Benutzereingabe. Stellt diese Benutzereingabe einen zulässigen Wert da, so wird einfach gar nichts unternommen und YES als Returnwert zurückgegeben.
•	Ist der erste Parameter nicht akzeptabel, lässt sich aber aus ihm ein akzeptabler Wert ableiten, so wird dieser erzeugt und über die Parameterliste (Vorsicht: Zeiger-Zeiger!) zurückgegeben. Auch in diesem Falle muss YES der Returnwert sein.
•	Ist der erste Parameter nicht akzeptabel und lässt sich auch keiner Erzeugen, so wird über den Error-Parameter (Vorsicht: Zeiger-Zeiger!) ein Error-Objekt zurückgeliefert. Der Returnwert muss hier auf NO lauten.
Stellen wir uns eine Eigenschaft lastname vor, die nur Namen akzeptiert, die aus höchstens vier Buchstaben bestehen. Eine entsprechende Validierungsmethode sähe so aus:
- (BOOL)validateLastname:(id*)value error:(NSError**)error 
{
   // nil ist als Wert immer erlaubt. 
   // Beachte aber den Zeiger-Zeiger!
   if( *value == nil ) {
      return YES; // alles okay
   }

   // Ein Wert mit bis zu 4 Buchstaben ist erlaubt:
   if( [(*value) length] <= 4 ) {
      return YES;
   }

   // Einen Wert mit mehr als 4 Buchstaben kann man anpassen:
   *value = [(*value) substringToIndex:4];
   return YES;
}
Soll indessen der Name mindestens vier Buchstaben enthalten, ist es natürlich nicht möglich, eine falsche Eingabe zu retten. Entsprechender Code:
- (BOOL)validateLastname:(id*)value error:(NSError**)error 
{
   // nil ist als Wert nicht erlaubt. 
   if( *value == nil ) {
      *error = [NSError errorWithDomain:@"reverse DNS"
                                   code:1
                               userInfo:@"Name zu kurz"];
      return NO; // Fehler!
   }

   // Ein Wert mit weniger als 4 Buchstaben ist nicht erlaubt:
   if( [(*value) length] < 4 ) {
      *error = [NSError errorWithDomain:@"reverse DNS"
                                   code:1
                               userInfo:@"Name zu kurz"];
      return NO; // Fehler!
   }

   return YES;
}
Die Domain müssen Sie freilich nach dem bereits beschriebenen System der reverse Domains umbenennen.

b) Setter schreiben, der die Funktionalität erledigt.

c) Delegate/Controller

d) Controller-Binding, welches im Setter umwandelt