2014-12-11 2 views
0

안녕하세요 일반 및 plist 배열을 읽고 하나의 값을 편집하고 다시 저장하려고합니다. 여러 가지 방법을 시도했지만 잘못하고있는 것을 정확히 파악하지 못했습니다.스위프트 편집 plist 배열

//These three lines are outside any function to make them global 
var dict: NSDictionary! 
var data: NSMutableDictionary! 
var path: String! 

    let seconds = Float(mytime) 

    var HighScores = dict.valueForKey("TiltHighScores") as? NSArray 
    var myHighScores:NSArray = HighScores! 
    var fakeLevelHighScore = myHighScores[MyGame.level] as NSNumber 
    var LevelHighScore = fakeLevelHighScore.floatValue 
    println("\(LevelHighScore)") 
    println("\(seconds)") 

    myNewHighScore = myHighScores 


    if (seconds>=LevelHighScore){ 
     println("its happening") 
     myNewHighScore[MyGame.level] = NSNumber(double: Double(seconds)) 
     //error one on line above, error two on line below 
     data.setObject(myNewHighScores, forKey: "TiltHighScores") 
     data.writeToFile(path, atomically: true) 
    } 

편집 :에 죄송 방법 막연한 질문은 여기에 있었다 좀 더 자세한 사항은 다음과 같습니다. plist에서 잘 읽었습니다. 따라서 plist를 읽는 것과 함께가는 길과 모든 것이 정확합니다. 배열을 편집하고 다시 저장하는 데 문제가 있습니다. 임을 편집하려고하는 배열을 TiltHighScores라고합니다. 이 변수를 HighScores 변수로 가져옵니다. 이것을 풀려면 myHighScores를 HighScores로 설정하십시오! 표. 나는 현재 수준의 최고 점수를 얻는 배열에서 가치를 끌어내는 동일한 과정을 수행한다. 이것은 모두 작동합니다. 여기에서 내가 문제를 받고있는 곳입니다. 나는 사용자 점수 (초)가 레벨의 최고 점수보다 큰지를 테스트하고보고 싶습니다. 새로운 최고 점수를 저장하고 싶습니다. 나는 배열 (myNewHighscores)을 생성하고 원래의 최고 스코어의 값으로 값을 채운 다음 한 값 (레벨 값)을 변경하고 다시 저장함으로써이 작업을 시도했다.

이제 if 문에서 두 가지 오류가 발생합니다. 이 표현 두 번째의 결과를 할당 할 수 없습니다 : 정확한 라인 첫 번째에 대한 주석 참조 해결되지 않은 식별자의 사용 'myNewHighScores'

내가 처음이 두 번째 원인을 확신합니다.

누구든지 내 논리를 고칠 수 있으면 매우 감사 할 것입니다. 이것이 내 목표를 달성하기위한 나쁜 방법 일 뿐인데 나는 새로운 방식으로 개방되어 있습니다.

감사합니다.

답변

1

자세한 내용 없이는 말할 수 없습니다 (예 : 디버거를 실행 해 보셨습니까? 무엇이 표시 되었습니까?)하지만 가능한 시나리오는 다음과 같습니다. MyProperties.plist이 문서 디렉토리에 이미 존재하지 않습니다. 결과 : path에서 읽을 수있는 아무것도 없기 때문에

  1. data은 전무하다.
  2. 파일을 path에 복사하지만 그 파일은 data으로 변경되지 않습니다.
  3. 나중에 datapath에 작성하려고 시도하지만 data이 없으므로 아무 일도 일어나지 않습니다. 코드가 그 힘을 실패하거나 프로젝트 진행되는 다른 내용에 따라 관련되지 않을 수도 있습니다 원인이 될 수

다른 것들 :

  • 을 어쩌면 MyProperties.plist이 응용 프로그램 번들에 존재하지 않는, 그래서 결코 복사되지 않습니다.
  • MyProperties.plist이 있지만 내용이 유효하지 않습니다 NSDictionary.
  • MyProperties.plist이 유효하고 NSDictionary 일 수 있지만 TiltHighScores의 값을 포함하지 않을 수 있습니다.
  • secondsLevelHighScore보다 작거나 같을 수 있으므로 파일에 data을 쓰려고하지 마십시오.

myNewHighScore을 만드는 방식처럼 다른 이상한 일들이 일어나서 값을 할당 한 다음 아무 것도하지 마십시오. myNewHighScore 어딘가 사용 했습니까?

+0

답장을 보내 주셔서 감사합니다. 나는 물건을 지우고 편집에서 내 코드를 더 읽기 쉽게 만들어 보았습니다. –