여러 소스에서 데이터를 가져 오는 핵심 데이터 프로젝트가 있습니다. 모든 데이터가 저장되는 것은 아니므로 저장하기 전에 데이터를 전달하는 구조체를 만들었습니다. 나는 UITableView
섹션을 표시 할 때문에싱글 톤이 원하는대로 작동하지 않습니다.
struct SearchResult {
var myURL: String?
var myHeadline: String?
init() {}
init(myURL: String, myHeadline: String) {
self.myURL = myURL
self.myHeadline = myHeadline
}
}
, 나는뿐만 아니라, 그에 대한 struct
을 만들어 :
struct ResultsObjects {
var sectionName: String?
var sectionObjects = [SearchResult]()
init() {}
init(sectionName: String) {
self.sectionName = sectionName
}
}
마지막으로, 나는 유지 유지하기 위해 singleton
을 만들어 그들을 절약 할 SearchResult
객체 이전 managedObjectContext
.
class SearchResultsArray {
static let sharedInstance = SearchResultsArray()
var resultsObjectsArray = Array<ResultsObjects>()
fileprivate init() {}
}
내 목표는 여러 클래스를 통해 액세스 할 수있는 SearchResultsArray
클래스가 하나 개의 클래스에로 ResultsObjects
를 덤프 할 수 있어야하고, 다른에서 ResultsObjects
을 볼 수있다. 다음과 같이 MyViewController
에
, 나는 SearchResultsArray
를 인스턴스화하고 있습니다 :
var resultsObjectsArray = SearchResultsArray.sharedInstance.resultsObjectsArray
는 내가 채울
resultsObjectsArray
을 사용하십시오
UITableViewController
있습니다.
MyViewController
에서 단추는 MyParserClass
의 메서드를 사용하는 메서드를 호출하여 웹 페이지를 구문 분석합니다. 이것도 작동합니다.
MyParserClass
는 MyViewController
과 동일한 방법으로 resultsObjectsArray
를 선언하는 방법은 SearchResult
객체를 생성 ResultsObjects
로 덤프 및 SearchResultsArray.resultsObjectsArray
로 추가하는 MyParserClass
에서
var resultsObjectsArray = SearchResultsArray.sharedInstance.resultsObjectsArray
불린다. 이것은 잘 작동합니다. 나는 resultsObjectsArray
로 덤프됩니다 ResultsObjects
를 생성하는 방법에 다음 줄에 던졌다 : 나는 MyViewController
의 updateSearchResults
대리자 메서드에 인쇄 문을 던졌다와 관계없이 거기에 있었다 말씀 MyParserClass
의, 0 반환
print("\(resultsObjectsArray.count) ResultsObjects in SearchResultsArray")
delegate.updateSearchResults()
위임 메서드를 호출하기 바로 전에.
응용 프로그램이 충돌하지 않지만 싱글 톤에 문제가있는 것 같습니다. 어떤 제안을 다시 : 내가 뭘 잘못하고있어 크게 감사합니다.
본 게시물을 보았습니까? http://stackoverflow.com/questions/26742138/singleton-in-swift 우리는 배수를 얻지 못하도록 둘 다 '최종'클래스를 선언해야한다고 제안합니다. 체크 아웃 할 가치가있다 – Russell
배열은 신속한 값 유형이다. 인스턴스 변수를 사용하여 배열을 참조 할 수 없습니다. 항상'SearchResultsArray.sharedinstance.resultsObjectsArray'를 사용해야합니다 – Paulw11
@ Paulw11 Wow! 나는 내가 간단한 것을 놓치고 있다는 것을 알았지 만, WOW! 답변 해 주셔서 대단히 감사합니다. 나는 그것을 매우 감사한다. – Adrian