2015-04-06 12 views
20

Çalışması gerekir. İşteAyrıştırmayı Kaldır, Yerel Datastore'dan Nesneyi Kaldırmaz

almak için birçok girişimi biri bu ben sabitlemesini kaldırmayı sonra bir sorgu yapmak ve nesne hala orada

  myTrainingSessions[indexPath.row].unpinInBackgroundWithBlock{ (succ, e) -> Void in 
      if succ == true { 

       // just remove from table view etc 
       self.myTrainingSessions[indexPath.row].deleteEventually() 
       self.myTrainingSessions.removeAtIndex(indexPath.row) 
       self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 

       // Shows that my object is still in datastore! 
       // object should be UNPINNED - but appers in this result.... 
       var query = PFQuery(className:TrainingSession.parseClassName()) 
       query.whereKey(self.userType(), equalTo: PFUser.currentUser()) 
       query.orderByDescending("createdAt") 
       query.fromLocalDatastore().ignoreACLs() 
       query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in 
        if error != nil { return } 
        if let result = objects as? [TrainingSession] { 
         println("local results") 
         println(result) 
        } 
       } 


      } 
     } 

anladım olduğunu.

+0

Sonunda işe yaradım, sadece kaba kuvvet denemesi ve hatası. – DogCoffee

+0

Aynı problemim var. Önceden tutturulmuş bir nesneyi kaldırdığımda, hala yerel depoda bulunur. – Dragouf

+0

@Dragouf bunu çözdünüz mü? – DogCoffee

cevap

3

:

https://developers.facebook.com/bugs/138298746504630/

Destek sorumlusu Tasarım gereği olduğunu, ancak bu şartnameyi iyileştirme isteğimin üzerine, ekibine bunun hakkında bilgi vereceğini söyledi.

+0

ile dizayn edilemez. Gönderi için teşekkürler, Aylık Soru ve Cevapları sordum ve google grup forumuna sıfır yanıtla gönderdim. – DogCoffee

+1

Şimdi bu konuda haberler yok mu? Bu benim için mantıklı değil. Kötü bir tasarım gibi görünüyor. En azından şimdi uygulamamı bitirebilirim ve çevrimiçi olmadıkça silmeye izin vermem. Yerel mağazayı çevrimdışı/çevrimiçi durumla en iyi şekilde nasıl kullanacağınıza dair iyi bir örnek bulmuyorum. Bu, temel verilere uygun bir alternatif mi? CloudKit'e taşınmalı mıyım? Pek çok soru .... – DogCoffee

+0

Hala çözülmedi? –

1

Bunu işe aldım, ancak iş akışını takip ediyorum.

Ben yeni bir nesne oluşturmak ve ben 2 aşağıdakileri yapın kurtarmaya hazır olduğumda aynı tableview içinde, bu

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 
    if editingStyle == .Delete { 
     self.myDataSource[indexPath.row].deleteEventually() 
     self.myDataSource.removeAtIndex(indexPath.row) 
     self.myDataSource.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 
    } 
    } 

getiriliyor süreci gibi silmek benim tableview içinde

newThing.saveEventually(nil) 

    newThing.pinInBackgroundWithBlock { (res, errn) -> Void in 
     // pinning is required for offline delete to work correct 
     if errn != nil { return } 
     //self.presentingViewController?.dismissViewControllerAnimated(true, completion: {() -> Void in 
      // dismiss modal if required... 
     //}) 
    } 

adımları

  1. Yerel Sorgu - yerel veri deposundan - bu doğrudan tablo görünümümü güncelleştirir - ilk
  2. Ağ Sorgusu - bu, sabitleme ve sabitleme yapar, tablo görünümü veri kaynağını günceller - bir kez tamamlandığında bu, tabloyu güncellemek için tekrar yerel Sorguyu çağırır. üzerinde silme öğeleri ve çevrimdışı - - bütün eserlerini

İşte bu konuda yeni öğeler ve çevrimdışı yaratarak kırmaya çalıştılar benim ağ sorgusu

func networkQuery() { 

    let nquery = theQuery() 

    nquery.findObjectsInBackgroundWithBlock { (objects, error) -> Void in 
     if let temp = objects as? [YourObjectType] where error == nil { 
      PFObject.unpinAllInBackground(self.myDataSource, block: { (resultBool, error) -> Void in 
       if error != nil { return } 
       PFObject.pinAllInBackground(temp, block: { (resultBool, error) -> Void in 
        if error != nil { return } 
        self.localQuery() 
       }) 
      }) 
     } 
    } 
} 

olduğunu. Umarım yardımcı olur, çevrimiçi herhangi bir örnek bulamadı bu yüzden sadece iz ve hata ile çalışmaya gitmek .... acı süreç, ama şimdi bir çekicilik gibi çalışıyor.

+0

Oturum açtığım zaman kodumda PFQuery.clearAllCachedResults() olduğunu fark ettim. Bu kodu kaldırdığına göre yukarıdaki kod, şimdiye kadar gerçekleştirilen sınamalardan beklendiği gibi çalışıyor. – DogCoffee

+0

Aynı sorunu yaşıyorum ancak yukarıdaki .Delete kodunuzdaki herhangi bir noktayı kaldırdığınız veya sildiğiniz yeri göremiyorum. Nesnenin sabitlenmediğini göstermek için yerel veri deponuzu nasıl güncellersiniz? – GarySabo

+0

self.myDataSource [indexPath.row] .deleteEventually() öğesinin kaldırılması gerekir. Parse, senkronize edilmemiş öğeleri silemediğinizi söylediği için bu projeden vazgeçtim. Parse'ye forumu sordum ve bir şeyleri sorup cevap alamadım. Doğru olarak işaretlediğim cevap, bu "garip" uygulamayı doğrular. – DogCoffee

2

Bunun sizin için çalışmadığının nedenlerinden biri, yerel veri deponuzda hala sabitlemek istediğiniz nesneyle ilişkisi olan nesneler olabileceğidir. Bunu düzgün bir şekilde yapmak için önce tüm bu nesneleri ayırın ve sonra hedef nesneyi ayırın.

0

Parse.com'da R & D yaptıktan sonra Bulutta depolandıktan sonra yerel depolama alanından nesneleri kaldırabileceğinizi biliyorum. B'coz ayrıştırması temel olarak bulutta veri depolamak için kullanılır, böylece bulutta depolandıktan sonra verilerin sabitlenmesini sağlar. örn.

- (void)syncDataToCloud:(id)sender { 
    PFQuery *qry = [PFQuery queryWithClassName:@"Person"]; 
    [qry fromLocalDatastore]; 
    NSArray *arr = [qry findObjects]; 
    [PFObject saveAllInBackground:arr block:^(BOOL succeeded, NSError *error) { 
     if (succeeded) { 
      DisplayAlert(@"Sync successful."); 
     } else { 
      DisplayAlert(@"Sync unsuccessful"); 
     } 
    }]; 
    [PFObject unpinAll:arr]; 
} 

benim için çalışıyor ... !! :)

Sana başvurulan nesne olan bir nesne sabitlemeyi kaldırmak olamaz sorun hakkında destek ekibine temas ettik, bu yüzden ilgilenenler için iplik paylaşıyorum
+0

Sabitlemeyi başaramadığınız nesneler ad ile sabitlenmemiş olabilir mi? Eğer öyleyse, sadece 'PFObject.unpinAllObjectsWithName ("YourPinName") ' –