如果你能帮助我解决这个问题,我将非常感激。
OpponentItem类的字段应该填充来自collectItems的数据。
我们的对手的项目将列在opponentList中,其数据来自incomingData。由于我不知道StartCoroutine何时结束collectData方法设置progressBar和Update检查opponentList的元素。
不幸的是,在方法中实例化的OpponentItem对象已经消失,因此list为空。
angular.js:13236 Error: [ng:areq] Argument 'fn' is not a function, got undefined
http://errors.angularjs.org/1.5.0/ng/areq?p0=fn&p1=not%20aNaNunction%2C%20got%20undefined
at http://localhost:3000/bower_components/angular/angular.js:68:12
at assertArg (http://localhost:3000/bower_components/angular/angular.js:1825:11)
at assertArgFn (http://localhost:3000/bower_components/angular/angular.js:1835:3)
at Promise.promise.error (http://localhost:3000/bower_components/angular/angular.js:10979:11)
at Object.getUserChannels (http://localhost:3000/scripts/services/media-service.js:38:37)
at activate (http://localhost:3000/scripts/controllers/player-controller.js:63:22)
at new <anonymous> (http://localhost:3000/scripts/controllers/player-controller.js:28:9)
答案 0 :(得分:1)
这是一个问题。您的列表将始终为空,因为默认情况下,参数按值传递(请参阅此MSDN链接)
opponentList = new List<OpponentItem>();
StartCoroutine(collectData<OpponentItem>(opponentList, incomingData, collectItems));
分配list = new List<T>(tempArray.Length)
后,您将项目添加到新的列表引用中,而不是传递给collectData()的项目。
您有两个选择:
1)清除列表而不是重新分配
public IEnumerator collectData<T>(List<T> list, string[] tempArray, string[] queryArray) where T : new() {
// list = new List<T>(tempArray.Length); // ** problem
list.Clear(); // ** try clearing the list instead
for(int h = 0; h < tempArray.Length ; h++){
2)通过引用传递列表
opponentList = new List<OpponentItem>();
StartCoroutine(collectData<OpponentItem>(ref opponentList, incomingData, collectItems));
}
public IEnumerator collectData<T>(ref List<T> list, string[] tempArray, string[] queryArray) where T : new() {
list = new List<T>(tempArray.Length);