Parsen von einer HTML Tabelle in Swift

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hi,
    wisst ihr wie man einen Thread 1: breakpoint 2.1 löst?

    Er wir angezeigt in der zeile : defaults.setObject(Klasse , forKey: "Klasse")



    Code:

    //
    // ViewController.swift
    // Vertretung
    //
    // Created by Steffen Rohwer on 10.07.16.
    // Copyright © 2016 Steffen Rohwer. All rights reserved.
    //

    import UIKit

    class ViewController: UIViewController {

    @IBOutlet weak var Textfeld: UITextField!
    @IBOutlet weak var KlasseLabel: UILabel!

    var Klasse : String? = ""



    override func viewDidLoad() {
    super.viewDidLoad()



    }

    override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
    }


    @IBAction func Speichern(sender: AnyObject) {
    //zum Speichern der Klasse
    Klasse = Textfeld.text
    KlasseLabel.text = Klasse

    let defaults = NSUserDefaults.standardUserDefaults()
    defaults.setObject(Klasse , forKey: "Klasse")

    }


    @IBAction func RechtsSwipe(sender: AnyObject) {

    let defaults = NSUserDefaults.standardUserDefaults()
    let dict = defaults.objectForKey("Klasse")
    let myString = dict as! NSString
    //1.Conversion between the String, NSString, NSData, and [UInt8]
    //Convert String to NSString
    let myNSString = myString as NSString

    //Convert NSString to NSData
    let myNSData = myNSString.dataUsingEncoding(NSUTF8StringEncoding)!

    //Get length of [UInt8]
    let length = myNSData.length

    //Convert NSData to [UInt8] array
    var myArray = [UInt8](count: length, repeatedValue: 0)
    myNSData.getBytes(&myArray, length: length)

    //Convert [UInt8] to NSData
    let resultNSData = NSData(bytes: &myArray, length: length)

    //Convert NSData to NSString
    let resultNSString = NSString(data: resultNSData, encoding: NSUTF8StringEncoding)!

    //Convert NSString to String

    let resultString = resultNSString as String

    KlasseLabel.text = resultString

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Steffen ()

  • Steffen schrieb:


    wisst ihr wie man einen Thread 1: breakpoint 2.1 löst?
    Indem man in Xcode den Breakpoint löscht ... in dem entsprechenden Navigationsbereich, nach Rechtsklick auf das entsprechende Zeilensymbol oder durch Drag'n'drop desselben.

    Code-Tags helfen bei Forenbeträgen, Quelltext zu lesen ... auch wenn es hier nicht notwendig war.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Quellcode

    1. //
    2. // ViewController.swift
    3. // Vertretung
    4. //
    5. // Created by Steffen Rohwer on 10.07.16.
    6. // Copyright © 2016 Steffen Rohwer. All rights reserved.
    7. //
    8. import UIKit
    9. class ViewController: UIViewController {
    10. @IBOutlet weak var Textfeld: UITextField!
    11. var Klasse : String? = ""
    12. @IBOutlet weak var KlasseLabel: UILabel!
    13. override func viewDidLoad() {
    14. super.viewDidLoad()
    15. let defaults = NSUserDefaults.standardUserDefaults()
    16. let dict = defaults.valueForKey("Klasse")
    17. let myString = dict as! NSString
    18. //1.Conversion between the String, NSString, NSData, and [UInt8]
    19. //Convert String to NSString
    20. let myNSString = myString as NSString
    21. //Convert NSString to NSData
    22. let myNSData = myNSString.dataUsingEncoding(NSUTF8StringEncoding)!
    23. //Get length of [UInt8]
    24. let length = myNSData.length
    25. //Convert NSData to [UInt8] array
    26. var myArray = [UInt8](count: length, repeatedValue: 0)
    27. myNSData.getBytes(&myArray, length: length)
    28. //Convert [UInt8] to NSData
    29. let resultNSData = NSData(bytes: &myArray, length: length)
    30. //Convert NSData to NSString
    31. let resultNSString = NSString(data: resultNSData, encoding: NSUTF8StringEncoding)!
    32. //Convert NSString to String
    33. let resultString = resultNSString as String
    34. KlasseLabel.text = resultString
    35. }
    36. override func didReceiveMemoryWarning() {
    37. super.didReceiveMemoryWarning()
    38. // Dispose of any resources that can be recreated.
    39. }
    40. @IBAction func Speichern(sender: AnyObject) {
    41. //zum Speichern der Klasse
    42. Klasse = Textfeld.text
    43. KlasseLabel.text = Klasse
    44. let defaults = NSUserDefaults.standardUserDefaults()
    45. defaults.setValue(Klasse, forKey: "Klasse")
    46. }
    47. }
    Alles anzeigen
    Das ist mein neuer code nun bekomme ich in Zeile 43 einen neuen Fehler!

    Thread 1: EXC_BAD_INSTRUCTION(code=EXC_l386_INVOP, subside 0x0)

    Wie behebe ich so etwas ?
  • Was soll dieser Code überhaupt machen? Vor lauter wahllosem Hin- und Herkonvertieren mit nicht-sprechenden Variablen-Bezeichnungen ist mir ganz schwindelig geworden.

    Weißt Du, was Du erreichen möchtest? Und wenn ja, überlege Dir mal ohne Code, welche Informationen Du hast und welche Schritte notwendig sind, dieses Ergebnis zu erreichen. In Prosa, ohne Code.

    Das oben kommt mir doch sehr zusammenkopiert vor.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • MyMattes schrieb:

    Was soll dieser Code überhaupt machen? Vor lauter wahllosem Hin- und Herkonvertieren mit nicht-sprechenden Variablen-Bezeichnungen ist mir ganz schwindelig geworden.

    Weißt Du, was Du erreichen möchtest? Und wenn ja, überlege Dir mal ohne Code, welche Informationen Du hast und welche Schritte notwendig sind, dieses Ergebnis zu erreichen. In Prosa, ohne Code.

    Das oben kommt mir doch sehr zusammenkopiert vor.

    Mattes
    ich wollte so ca das gleiche schreiben, hab mir dann die tipparbeit aber gespart...
  • MyMattes schrieb:

    Vor lauter wahllosem Hin- und Herkonvertieren mit nicht-sprechenden Variablen-Bezeichnungen ist mir ganz schwindelig geworden.
    Wenn du diese ganzen redundanten Kommentare weglässt, hast du nur noch halb so viel Code. ;)

    Der Compiler optimiert die Anweisungen in viewDidLoad wahrscheinlich zu NOP. +scnr+
    „Meine Komplikation hatte eine Komplikation.“
  • Also jetzt noch mal erklärt:
    Es soll folgendermaßen ablaufen:

    ButtonSpeichern gedrückt -- Wert von Textfeld in Variable Klasse -- Wert als String vom Variable Klasse als NSString in die NSUserdefaults

    View did load -- Wert von den NSUser defaults in variable --- variable in convertierung vom NSString zum String --- Resultvariable als string in ein Label


    Wenn es einfacher geht freue ich mich natürlich über tipps.

    Der Fehler wird immer angezeigt, wenn ich eine Swipe Gesture ausführe, die den Screen wechselt
  • Nochmal zu den Vorschlägen etwas aufweinen Server zu realisieren, der dann die Daten an eine App schickt ist gut, doch ich habe mit dem Lehrer gesprochen der unseren Schulserver verwaltet und der meint, dass es zwar eine gute Idee sei aber auf unserem hauseigenen Server läuft nurnoch ne Dateifreigabe.
    Der Rest läuft auf dem Server der Stadt und da bekomme ich sicher keinen Zugriff drauf
  • Thallius schrieb:

    gritsch schrieb:

    wenn du nur den wert eines label sspeichern und wieder laden willst kannst di diesen ganz einfach über bindings an das textfield binden (key für userdefaults angeben und fertig).
    Hab ich was verpasst. Es gibt jetzt Bindings in iOS?
    Gruß

    Claus
    achso, es geht mal wieder um iOS UND Swift... trotzdem ist der code komplett unleserlich, unverständlich und teils sinnfrei.
  • Ja ich bin gerade dabei mich ein wenig einzulesen, doch da ich auch noch andere Dinge die Tage zu tuen hätte habe ich es bis jetzt nur geschafft das drumherum zu erstellen.
    Dabei tritt nun eine Fehlermeldung auf und ich habe nicht verstanden, wie man das was du beschriebe hast behebt.
    Der HTML parsing code wird jetzt erst nach und nach geschrieben.
  • Nochmal der Hinweis: Schau' Dir dafür JavaScript an. Da bekommst Du mittels DOM das ganze komplexe, fehleranfällige HTML-Parsing umsonst und kannst z.B. anhand der ID einfach auf die Tabelle und deren Inhalte zugreifen:

    Quellcode

    1. table = document.getElementById("meineTabellenID")

    Und auf den Inhalt der Zelle (x,y) kannst Du dann so zugreifen:

    Quellcode

    1. var row = table.rows[x];
    2. var cell = row.cells[y];
    3. var result = cell.innerText;

    Du kannst JavaScript sowohl unter iOS als auch unter Mac OS X in einem WebView ausführen lassen