Video: EV YAPMA SİMULATOR 2024
Neal Goldstein
iOS bulut programlaması hakkında konuştuğunuzda iki şeyden söz ediyorsunuz: iCloud (Apple tarafından sizin için uygulanır ve cihazlar arasında veri senkronizasyonu) ve web hizmetleri (uygulamanızın bazı işlemlerini nerede olduğunu bilir ortasında bir yere uzaktaki bir bilgisayar tarafından yapılmasını sağlar). Web hizmetleri, bir kullanıcı tarafından bulutta depolanan veriler için yapılan web hizmeti istekleri 'ı verimli şekilde dağıtma yöntemlerine güveniyor. En etkili iki format (şu anda en azından) XML ve JSON'dur. Burada bulabileceğiniz ipuçları, bir web isteğini nasıl ayarlayacağınızı (örnek olarak Google Coğrafya kodlayıcı web hizmetini kullanarak) ve uygulamanızda web hizmeti verilerini kullanabilmeniz için hem XML yanıtını hem de JSON yanıtını ayrıştırmayı gösterir..
Örneğin Google Geocoding Web Hizmeti size bir seçenek sunuyor.
Yanıtın XML biçiminde olmasını istiyorsanız,
// haritalarını kullanırsınız. googleapis. com / maps / api / geocode / xmlYanıtınızı JSON'da istiyorsanız,
// maps kullanırsınız. googleapis. com / maps / API / coğrafi kod / json? paremters
Neye benzemekle birlikte, XML ve JSON veri yapılarından nasıl bilgi alabileceğinizin uygulanmasında oldukça farklıdır.
Buluttan bir XML Yanıtını Ayrıştırma
Bulut temelli bir web hizmeti kullandığınızda, yanıtınız XML'de olabilir. Bulut tabanlı web servisinizle çalışırken, web tarayıcınız
// maps'e aşağıdakileri girmeliydiniz. googleapis. com / maps / API / coğrafi kod / xml? sensör = true ve adres = İmparatorlukDevlet Binası &
bazı XML geri alırsınız - bu, örneğin:… 40. 7484395 -73. 9856709 …
XML kendisini anlaşılması kolay şekilde kendini ifade etmediğinden, XML'in verdiği her şeyi ayrıştırmanız gerekir.
XML'in başlangıç ve bitiş etiketlerine sahip öğelerden oluştuğunu unutmayın. ICloud aracılığıyla bilgi almak için, temsilci desenini kullanan NSXMLParser sınıfını kullanın. İşte böyle işler:
NSXMLParser * xmlParser = [[NSXMLParser alloc] initWithData: data]; [xmlParser setDelegate: self]; [xmlParser ayrıştırma];
Bir XML veri yapısını ayrıştırmak için uygulayacağınız dört NSXMLParser temsilci yöntemi var:
ayrıştırıcı: didStartElement: namespaceURI: qualifiedName: öznitelikleri: ayrıştırıcı: foundCharacters: ayrıştırıcı: didEndElement: namespaceURI: nitelikliAdı: ayrıştırıcı: parseErrorOccurred:
ayrıştırıcı: didStartElement: namespaceURI: nitelikliAdı: öznitelikleri: örneğin, ayrıştırıcının bir etiketle bir öğe bulduğunu biliyorsunuz ve veriyi ayrıştırıcı foundCharacters: yönteminde ayıklamak size kalmış.Buluttan JSON Yanıtını Ayrıştırma
Bulut temelli bir web servisi kullandığınızda, yanıtınız JSON'da olabilir. Bulut tabanlı web servisinizle çalışırken, web tarayıcınız
// maps'e aşağıdakileri girmeliydiniz. googleapis. com / maps / API / coğrafi kod / json? sensor = true & address = İmparatorlukDevlet Binası &
bazı JSON'ları geri alırsınız - aşağıdaki örnek, örneğinsonuç {results: [{… geometri {{
sınırları:
{ > kuzeydoğu: { enlem: 40. 7489545, lng: -73. 98483449999999}, güneybatısında: { enlem: 40. 7479245, lng: -73. 9865073}}, konum: { enlem: 40. 7484395, lng: -73. 9856709}, …} JSON, XML kadar şifreli olduğundan, JSON'un verdiği her şeyi ayrıştırmanız gerekir.Bununla birlikte, JSON'u ayrıştırmak XML'yi ayrıştırmaktan oldukça farklıdır. JSON, sessizce tanıdığınız iki yapı üzerine kurulmuştur - diziler ve sözlükler. Aşağıdaki JSON örneği her ikisini de kullanır:
NSError * error = nil; NSDictionary * responseDict = [NSJSONSerialization JSONObjectWithData: data
seçenekleri: NSJSONReadingMutableContainers hatası: & hata];JSON ayrıştırma işlemini gerçekleştirirken, ayarlayabileceğiniz birkaç seçeneğiniz de var:
NSJSONReadingMutableContainers: Geri döndüğünüz diziler ve sözlükler değiştirilebilir, böylece bunları değiştirebilirsiniz. Varsayılan değişmez.
NSJSONReadingMutableLeaves: Geri getirdiğiniz dizeler değiştirilebilir, böylece bunları değiştirebilirsiniz. Varsayılan değişmez.
NSJSONReadingAllowFragments: Çözümleyicinin diziler veya sözlük olmayan üst düzey nesnelere izin vermesini belirtir. Varsayılan, JSON üst düzey nesnelerin bir dizi veya sözlük olmasını gerektirir.-
-
NSJSONSerialization sınıfını kullandığınızda, (genellikle ve zorunlu olarak değil), dizeleri ve sayıları ve hatta diğer dizileri ve sözlükleri içerebilecek bir dizi veya sözlük döndürürsünüz (özellik listesi nesnelerini burada düşünün).
-
Bu durumda, lat ve lng konumunda
NSDictionary * result = [sonuçlar objectAtIndex: 0] yaparak ulaşabilirsiniz. NSDictionary * geometry = [sonuç objectForKey: @ "geometri"]; NSDictionary * konum = [geometri nesnesiForkesi: @ "yer"]; enlem = [konum değeriForKey: @ "lat"]; boylam = [konum değeriForKey: @ "lng"];