การเข้าถึงสตริงจาก plist จะคืนค่าศูนย์

นี่คือรหัส:

NSString* filepath = [[NSBundle mainBundle]
                      pathForResource:@"Stones" ofType:@"plist"];
NSDictionary *stones = [NSDictionary dictionaryWithContentsOfFile:filepath];
NSArray* array = stones[@"StoneArray"];
NSDictionary* dic = array[stoneInt];
NSString* string = [[NSString alloc] init];
string = dic[[NSString stringWithFormat:@"%d", stoneInt]];
return string;

stoneInt เป็นตัวเลขตั้งแต่ 0-59 (ในกรณีเริ่มต้นคือ 11)

เมื่อฉันตั้งค่าเบรกพอยต์ที่คำสั่ง return stoneInt จะเป็น 11 (ตามที่ควรจะเป็น) แต่ string ก็คือ nil ผมทำอะไรผิดหรือเปล่า?

นอกจากนี้ เมื่อฉันวิเคราะห์ dic มันแสดงให้เห็นอย่างถูกต้องว่ามันทำงานกับคีย์ 11 และสตริง Maze


นี่คือซอร์สโค้ดสำหรับ plist:

<plist version="1.0">
<dict>
    <key>StoneArray</key>
    <array>
        <dict>
            <key>1</key>
            <string>Ocean</string>
        </dict>
        <dict>
            <key>2</key>
            <string>Grass</string>
        </dict>

สิ่งนี้ดำเนินต่อไปจนถึงสตริง 59 สตริงที่ฉันพยายามส่งคืน (ในกรณีใดกรณีนี้ สมมติว่า 1) คือ "มหาสมุทร" วัตถุ string ของฉันคือ nil เสมอ


person Anthony Shintoluggenprog    schedule 01.11.2016    source แหล่งที่มา
comment
เหตุใดคุณจึงใช้ stoneInt สองครั้งในสองวิธีที่แตกต่างกัน ขั้นแรกให้คุณใช้เป็นดัชนีใน array ซึ่งจะให้พจนานุกรมแก่คุณ จากนั้นคุณแปลง stoneInt เป็นสตริงและใช้เป็นคีย์ในพจนานุกรม นั่นดูแปลกจริงๆ   -  person rmaddy    schedule 01.11.2016
comment
ฉันรู้ว่าฉันได้รับข้อผิดพลาดในตอนแรกเมื่อฉันเพิ่งมีอาร์เรย์ของสตริง ดังนั้นเมื่อคุณสร้าง plist และเห็นรายการ 0, รายการที่ 1 ฯลฯ ฉันจึงใช้มันเป็นสตริงและเขียน NSString* string = array[[NSString stringWithFormat:@"%d", stoneInt]];   -  person Anthony Shintoluggenprog    schedule 01.11.2016
comment
ไม่ว่าจะด้วยวิธีใด ก็ยังคงให้ผลลัพธ์เป็น nil สำหรับสตริง   -  person Anthony Shintoluggenprog    schedule 01.11.2016
comment
ไม่มีใครสามารถช่วยได้เว้นแต่คุณจะอัปเดตคำถามของคุณด้วยโครงสร้างของ plist ที่แสดงคุณค่าที่คุณกำลังพยายามได้รับ   -  person rmaddy    schedule 01.11.2016
comment
การแก้ไขของฉันช่วยได้หรือไม่?   -  person Anthony Shintoluggenprog    schedule 01.11.2016


คำตอบ (1)


ขออภัย ปรากฎว่าค่า stoneInt จริง ๆ แล้วน้อยกว่าคีย์ที่ฉันพยายามเข้าถึงหนึ่งคีย์ stoneInt คือ 11 แต่คีย์ที่เข้าถึงถูกระบุว่าเป็น 12

person Anthony Shintoluggenprog    schedule 01.11.2016