Kategorien-Archiv Knowledgebase DE

VonTobias Stephan

Swift 5 App im Vorderung erkennen (app moved to foreground)

Manchmal ist es sinnvoll zu erkenne, ob die eigene App in den Vordergrund geschoben wird. Mit diesen paar Codezeilen ist das leicht zu ermitteln.

   override func viewDidLoad() {
        super.viewDidLoad()
        

       

        let notificationCenter = NotificationCenter.default
        notificationCenter.addObserver(self, selector: #selector(appMovedToForeground), name: UIApplication.willEnterForegroundNotification, object: nil)

    }

    @objc func appMovedToForeground() {
        //do stuff
    }

VonTobias Stephan

Swift 5 tap gesture Geste

Diese paar Zeilen Code helfen schnell zu verstehen wie man einem Image die Tap Geste beibringt.

   
override func viewDidLoad() {
        super.viewDidLoad()

        self.imgPlacesPic.isUserInteractionEnabled = true;
        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapGesture))
        imgPlacesPic.addGestureRecognizer(tapGesture)
    }

    @objc func tapGesture() {

        performSegue(withIdentifier: "FromMainToImages", sender: self)
    }

VonTobias Stephan

Swift 5 Notification Center lokale Benachrichtigung darstellen

Mit diese kurzen Sample kann man das einfach mal eben ausprobieren. Dieses Snippet unter die viewDidLoad Methode packen und von dort aus aufrufen.

 override func viewDidLoad() {
        super.viewDidLoad()

        self.SendLocalNotification(Title: "Titel der Benachrichtiung", Body: "Inhalt der Nachricht")
}

Hier einfach mal kurz zusammengefasst.
 func SendLocalNotification(Title: String,Body : String)
    {
        let center = UNUserNotificationCenter.current()
        center.requestAuthorization(options: [.alert,.sound]) { (granted, error) in
            print("...Fehler hier behandeln")

        }

        let content = UNMutableNotificationContent()
        content.title = Title
        content.body = Body
        content.sound = .default

        let date = Date().addingTimeInterval(10)
        let dateComponents = Calendar.current.dateComponents([.year,.month,.weekday, .hour,.minute,.second], from: date)
        print(date)
        let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: false)

        let uuidString = UUID().uuidString
        let request = UNNotificationRequest(identifier: uuidString, content: content, trigger: trigger)
        center.add(request) { (error) in
            if error != nil {
                print (error?.localizedDescription ?? "")

            }
        }
    }

VonTobias Stephan

Xcode code formatieren mit Shortcut

Mit der Tastenkombination

CTRL (bzw. STRG) + I

wird der markierte Textblock automatisch formatiert.

 

VonTobias Stephan

Xcode Text auskommentieren

Manchmal möchte man auch gleich mal einen ganzen Block auskommentieren, das funktioniert , indem man den Quellcode in folgende Zeichen packt: /* code */

 

 

 

 

 

 

 

Für dieses Beispiel wurde Xcode Version 11 benutzt.

VonTobias Stephan

Vortrag Amazon Suchbegriffe, Skalierbarkeit und AMZCheck in Leipzig

Am  22. August 2018 ging es in die schöne Stadt Leipzig – ähnlicher Vortrag wie in der Classic Remise, jedoch diesmal ungekürzt.
Am 23. fand der Vortrag in den Räumlichkeiten des Händlerbunds statt.

Nachtrag aus Februar 2020:
Ein neues Tools ist nun unter www.mcr-tools.de zu finden.

VonTobias Stephan

Multichannel Rockstars Vortrag zum Thema Skalierbarkeit und AMZCHECK Marktüberwachung

Michael Atug von den Multichannel Rockstars hat mir die Gelegenheit gegeben einen Vortrag zu halten. Als Thema hab ich mir mein Steckenpferd Skalierbarkeit und damit auch die Brücke zu AMZCHECK ausgesucht. Die Kernaussage zur Skalierbarkeit ist einfach. Nehmt Euch Tools für die Marküberwachung und handelt Produkte die bei steigendem Absatz nur wenig Mehraufwand bedeuten. In diesem Vortrag zeige ich das an einem konkreten Beispiel, nämlich eXODA Batteriekabel.

Der Vortrag fand im Rahmen eines Multichannel Rockstar-Stammtisches in der Classic Remise in Düsseldorf am 17.08.2018 statt.

Noch ein paar Eindrücke vom Stammtisch, auch wenn es mehr ein toller Event als ein Stammtisch war.

Eindrücke vom Multichannel Rockstars Stammtisch

 

VonTobias Stephan

SQL Abfrage nur Daten anzeigen die in anderer Tabelle nicht vorhanden sind

Beispiel für eine SQL Abfrage, die Ergebnisse ausschliesst. Hier darf der Wert aus der Tabelle1.Feld1 in der Tabelle im Feld1 nicht vorkommen.

SELECT Tabelle1.Feld1 FROM Tabelle1 
WHERE Tabelle1.Feld1 NOT IN ( SELECT DISTINCT Tabelle2.Feld1 FROM Tabelle2 )
VonTobias Stephan

Kabelrechner App Kabellänge berechnen Querschnitt und Durchmesser ermitteln iPhone IOS

iPhone IOS App installieren

Mit der LeckerStecker App kann man die benötigte Kabellänge ermitteln. Nach der Eingabe Watt und der Spannungsangabe ermittelt der LeckerStecker Kabelrechner den benötigten Kabelquerschnitt. Die App kann auf den gängigen Mobilen Geräten von Apple installiert werden.

Ausserdem hilft die App auch dabei Querschnitt in Durchmesser umzurechnen.

 

 

Hier geht es zu Webvariante zur Berechnung des Kabeldurchmessers oder des Kabeldurchschnitts.

VonTobias Stephan

Das Timeout ist abgelaufen oder Das Ausführungstimeout ist abgelaufen

Bei Verwendung des Microsoft SQL Server Management Studio Tabellendesigners
kann es zu folgender Fehlermeldung kommen.

Das Timeout ist abgelaufen oder Das Ausführungstimeout ist abgelaufen

Das geschieht vor allem dann, wenn man am Design einer Tabelle, die bereits
eine grosse Datenmenge enthält etwas ändern möchte.

Auf dieser Seite können Sie das Standardverhalten des Designers bestimmen. Um auf die Einstellungen zuzugreifen, klicken Sie im Menü Extras auf Optionen, erweitern Sie den Ordner Designer , und klicken Sie dann auf Tabellen-Designer.

Timeoutwert für Verbindungszeichenfolge für Tabellen-Designer-Updates überschreiben.
Lässt zu, dass für die Aktionen des Tabellen-Designers ein neuer Timeoutwert festgelegt wird. Das kann hilfreich sein, wenn der Tabellen-Designer Auswirkungen auf eine große Tabelle hat und für die Änderung der Tabelle zusätzliche Zeit benötigt.