سؤال

حسنا، وأنا أعلم أنا جديدة على الكائنات ج، ولكن لجميع المقاصد والأغراض التالية أدناه يبدو أنه يجب أن تعمل:

songCollection = [[NSMutableArray alloc] init];
    [songCollection addObject:@"test"];
    //Array is init, and I can see it in the debugger.
    songCollection = [GeneralFunctions getJSONAsArray:@"library"];
    // I can see the expected data in the debugger after this.
    [songCollection retain];
    NSLog(@"%@", [songCollection objectAtIndex:0]);
        // Crashes here due to the array not responding to the selector. Also, the array is now empty.
    //NSLog(@"%@", songCollection);
    NSArray * songList = [songCollection objectAtIndex:1];
    NSLog(@"%@", songList);

وأنا على أمل أن نجد المساعدة لي هنا، وأنا ضجيجا رأسي بالحائط!

هل كانت مفيدة؟

المحلول

وكان songCollection الأصل NSMutableArray، ولكن بعد ذلك overwrote مع كل ما هو عاد من [GeneralFunctions getJSONAsArray:@"library"]. أيا كان ذلك، فإنه ربما لا صفيف.

وبالمناسبة، كنت تسريب مجموعة هنا.

نصائح أخرى

ويتيح اتخاذ التعليمات البرمجية خطوة بخطوة بعيدا.

songCollection = [[NSMutableArray alloc] init];

ويخصص NSMutableArray جديد فارغ.

[songCollection addObject:@"test"];

ويضيف NSString @ "اختبار" لNSMutableArray songCollection

songCollection = [GeneralFunctions getJSONAsArray:@"library"];

والرميات بعيدا رجوع إلى مجموعة قابلة للتغيير قمت بإنشائه (الذاكرة وبالتالي تسرب) ويعطيك مؤشر جديد إلى شيء كنت لا تملك حتى الان.

[songCollection retain];

وولهذا جيد، وانت تأخذ ملكية songCollection. ومنذ هذا يعمل، وتعلمون أن getJSONAsArray عاد إما لا شيء أو NSObject.

NSLog(@"%@", [songCollection objectAtIndex:0]);
// Crashes here due to the array not responding to the selector. Also, the array is now empty.

وهكذا بوضوح songCollection ليست لا شيء، ولا أحد NSArray (قابلة للتغيير أو غير ذلك). تحقق من وثائق أو التوقيع لGeneralFunctions getJSONAsArray ونرى ما يعود في الواقع.

//NSLog(@"%@", songCollection);

وماذا يعني هذا الانتاج - التي ينبغي أن أقول لك ما songCollection هو في الواقع

.

وعلى افتراض انك معرفة لماذا getJSONAsArray وعدم العودة إلى NSArray، يمكنك تحويل NSArray إلى NSMutableArray مع

songCollection = [[GeneralFunctions getJSONAsArray:@"library"] mutableCopy];
// You now own songCollection

أو

songCollection = [[NSMutableArray alloc] init];
// You now own songCollection
[songCollection addObjectsFromArray:[GeneralFunctions getJSONAsArray:@"library"];

هل [GeneralFunctions getJSONAsArray: @ "مكتبة"]؟ في الواقع إرجاع NSArray

أنت متناسين ايضا لاطلاق سراح songCollection قبل إعادة تعيينه مع هذا الخط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top