2015-09-28 52 views
3

我今天更新了我的Xcode並在iOs9構建上運行我的Ionic應用程序。每當我從ng-repeat列表單擊到詳細信息視圖時,Xcode控制檯上彈出新的錯誤。錯誤是:JSON.stringify無法序列化循環結構:ios9錯誤的Ionic/AngularFire應用程序

error JSON.stringify()ing argument: TypeError: JSON.stringify cannot serialize cyclic structures. 

該錯誤似乎是由AngularFire firebaseObject引起的。這裏是如何複製的問題(有建於iOS和看到xcode7錯誤):

運行
  1. 使用離子首發sidemenu模板:

    $ sudo npm install -g ionic cordova 
    $ ionic start myApp sidemenu 
    
  2. 修改PlaylistsCtrl和PlaylistCtrl爲下面:

.controller('PlaylistsCtrl', function($scope, $firebaseObject, $firebaseArray) { 
 
    $scope.playlists = []; 
 
    var ref = new Firebase(MYFIREBASEURL); 
 
    var tasks = $firebaseArray(ref.child('tasks')); 
 
    $scope.playlists = tasks; 
 
}) 
 

 
.controller('PlaylistCtrl', function($scope, $stateParams, $firebaseObject) { 
 
    var id = $stateParams.playlistId; 
 
    console.log(id); 
 
    var ref = new Firebase(MYFIREBASEURL); 
 
    var task = $firebaseObject(ref.child('tasks').child(id)); 
 
    console.log(task); 
 
    $scope.task = task; 
 
});

修改2次:播放列表和播放列表來與下面的首發模板:

<ion-view view-title="Playlists"> 
 
    <ion-content> 
 
    <ion-list> 
 
     <ion-item ng-repeat="playlist in playlists" href="#/app/playlists/{{playlist.$id}}"> 
 
     {{playlist.$id}}/{{playlist.title}} 
 
     </ion-item> 
 
     <ion-item class="item-text-wrap">{{task.title}}/{{task.$id}}</ion-item> 
 
    </ion-list> 
 
    </ion-content> 
 
</ion-view> 
 

 
<ion-view view-title="Playlist"> 
 
    <ion-content> 
 
    <h1>{{task.$id}}</h1> 
 
    \t <p>{{task.title}}</p> 
 
    </ion-content> 
 
</ion-view>

運行$離子建立IOS,然後打開Xcode的構建sidemenu啓動應用程序文件在xcode7。在實際設備上運行 - 就像iPhone 5S(我的設備)一樣。在xcode日誌窗口中記下。

當單擊列表項,然後轉到細節播放列表視圖,它拋出錯誤這樣

2015-09-29 10:20:03.868 firebaseObjerr[572:142668] error JSON.stringify()ing argument: TypeError: JSON.stringify cannot serialize cyclic structures.

並添加ios9弄不好在此間表示:enter link description here 沒有解決的問題。 請幫忙!

[編輯]

這裏是我的系統信息(如離子,科爾多瓦是最新的):

Your system information: 

Cordova CLI: 5.3.3 
Gulp version: CLI version 3.9.0 
Gulp local: 
Ionic Version: 1.1.0 
Ionic CLI Version: 1.6.4 
Ionic App Lib Version: 0.3.8 
ios-deploy version: 1.7.0 
ios-sim version: 5.0.1 
OS: Mac OS X Yosemite 
Node Version: v0.12.5 
Xcode version: Xcode 7.0 Build version 7A220 

而對於火力和AngularFire,我抓住它從火力CDN:

<!-- Firebase --> 
<script src="https://cdn.firebase.com/js/client/2.2.4/firebase.js"></script> 
<!-- AngularFire --> 
<script src="https://cdn.firebase.com/libs/angularfire/1.1.2/angularfire.min.js"></script> 
+0

沒有什麼在這個例子中的代碼將觸發JSON.stringify()。也沒有關於如何構建播放列表的解釋,所以我們無法猜測循環引用的起始位置。 – Kato

+0

這裏也沒有版本信息,也沒有足夠的數據來創建repro。 – Kato

+0

OPS抱歉@加藤!我將帖子編輯爲最後一封電子郵件,並且意外刪除了控制器代碼(並由HTML代替)。我的錯!我添加了所有的控制器代碼,也添加了我的版本信息。除了上述更改外,我沒有修改sidemenu啓動器中的任何其他代碼。確切地說,我沒有在我的代碼中觸發任何JSON.stringify(),並且在firebaseObject加載到視圖中並觸發該錯誤時! –

回答

3

我有類似的問題。原來它被造成以下情形:

var userRef = new Firebase(FIREBASE_URL + '/users').child(uid); 
    profile = $firebaseObject(userRef); 
    console.log(profile) 

難道你嘗試登錄,有一個循環依賴一個火力點的數據結構?

嘗試刪除您的console.log()行。

0

刪除console.log爲我工作。我不得不做以下我的代碼(離子型谷歌分析插件 - https://ionicframework.com/docs/native/google-analytics/

// Google Analytics (console.log throws errors) 
    return GoogleAnalytics.startTrackerWithId("UA-97459358-1") 
    .then(() => { 
     //console.log('Google analytics is ready now'); 
     return GoogleAnalytics.enableUncaughtExceptionReporting(true) 
    }).then((_success) => { 
     //console.log("startTrackerWithId success") 
    }).catch((_error) => { 
     //console.log("enableUncaughtExceptionReporting", _error) 
    })