私のデータベースから辞書に名前の列を挿入して並べ替え、セクションを自分のtableViewに追加したいと思います。 私はデータベースからの名前だけを格納し、MutableArrayと辞書の配列を返す別の関数を返す関数を持っています。 なぜ私のMutableArrayが常にnilであるかわからないのですが、値を取得するために管理されている唯一の方法は、辞書をソートしようとしたときに戻り値の型[String、[String]文字列:[文字列]]Swift3を使用して私のデータベースから辞書への列を取得する方法
私のコード:
let sharedInstance = ModelManager()
class ModelManager: NSObject {
var database: FMDatabase? = nil
class func getInstance() -> ModelManager
{
if(sharedInstance.database == nil)
{
sharedInstance.database = FMDatabase(path: Util.getPath("test3.sqlite"))
}
return sharedInstance
}
func getAllCrimesNames() -> NSMutableArray { // Part1: database into mutableArray
sharedInstance.database!.open()
let resultSet: FMResultSet! = sharedInstance.database!.executeQuery("SELECT * FROM CrimeTable", withArgumentsIn: nil)
let marrCrimesInfo : NSMutableArray = NSMutableArray()
if (resultSet != nil) {
while resultSet.next() {
let crimesInfo : NameInfo = NameInfo()
crimesInfo.Name = resultSet.string(forColumn: "Name")
marrCrimesInfo.add(crimesInfo)
}
}
sharedInstance.database!.close()
return marrCrimesInfo
}
}
パート2:辞書に私mutableArrayを取得し、それを
class SectionData {
var marrCrimesNames : NSMutableArray!
func getCrimesNames() {
marrCrimesNames = NSMutableArray()
marrCrimesNames = ModelManager.getInstance().getAllCrimesNames()
}
func getSectionsFromData() -> [String: [String]] {
var sectionDictionary = [String: [String]]()
if marrCrimesNames != nil { // for some reason always nil!
let crime: NameInfo = marrCrimesNames.object(at: 0) as! NameInfo
_ = crime.Name
var firstLetter: [String] = []
for crime in marrCrimesNames {
firstLetter.append((crime as AnyObject).Name)
}
let characters = Array(Set(firstLetter.flatMap({ $0.characters.first })))
for character in characters.map({ String($0) }) {
sectionDictionary[character] = firstLetter.filter({ $0.hasPrefix(character) })
}
//var sortedSectionDictionary = Array(sectionDictionary.keys).sorted() // return [String, [String]] instead of [String: [String]]
}
return sectionDictionary
}
}
を並べ替える私はそれは多くのことを知っていますシンプルなものが欠けていて、本当に助けが必要です。 ありがとうございました...
。実際のSwift配列の代わりに 'NS [Mutable] Array'を使っているのはなぜですか? – rmaddy
私はそれを変更することができますが、まだ問題を解決していません –
'marrCrimesNames'が常に' nil'である理由を知りたい場合は、デバッガを使用してコードの実行をトレースしてください。 – rmaddy