2010-07-12 16 views
7

Bir portaldan bazı haberleri göstermek için bir uygulama yazıyorum. Haberler İnternet'ten bir JSON dosyası kullanılarak getirilir ve daha sonra CoreData Modeli kullanılarak bir NSMutableArray içine depolanır. Açıkçası, bir kullanıcı internetteki JSON dosyasındaki haberleri silemez, ancak bunları yerel olarak gizleyebilir. problemler, buraya gel Aşağıdaki kod var burada:NSMutableArray removeObjectAtIndex: geçersiz bir argüman istisnası atar

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {  
if (editingStyle == UITableViewCellEditingStyleDelete) { 
    if(!moc){ 
     moc = [[NewsFetcher sharedInstance] managedObjectContext]; 
    } 
    [[dataSet objectAtIndex:indexPath.row] setEliminata:[NSNumber numberWithBool:YES]]; 
    NSError *error; 
    if(![moc save:&error]){ 
     NSLog(@"C'è stato un errore!"); 
    } 
    [dataSet removeObjectAtIndex:indexPath.row]; 
    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES]; 
} 

satır: uygulamalarımdaki neden

[dataSet removeObjectAtIndex:indexPath.row];

aşağıdaki hata ile çökmesine:

2010-07-12 19:08:16.021 ProvaVideo[284:207] * -[_PFArray removeObjectAtIndex:]: unrecognized selector sent to instance 0x451c820 2010-07-12 19:08:16.022 ProvaVideo[284:207] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[_PFArray removeObjectAtIndex:]: unrecognized selector sent to instance 0x451c820'

Ben Neden işe yaramadığını anlamaya çalışıyorum ama yapamam. Uygulamayı yeniden başlatırsam, yeni doğru mantıksal olarak iptal edildi. Herhangi bir öneri? Şimdiden teşekkürler.


Arayüz:

@interface ListOfVideo : UITableViewController <NSFetchedResultsControllerDelegate> { 
    NSMutableArray *dataSet; 
} 
@property (nonatomic, retain) NSMutableArray *dataSet; 

// In the .m file: 
@synthesize dataSet; 

Başlatma viewDidLoad yılında: net yeni haberler için kontrol ederken

dataSet = (NSMutableArray *) [[NewsFetcher sharedInstance] 
           fetchManagedObjectsForEntity:@"News" 
           withPredicate:predicate 
           withDescriptor:@"Titolo"]; 
[dataSet retain]; 

updateDatabase ... Bu, ben MutableArray bunları ekleyin:

[dataSet addObject:theNews]; 
+1

Veri kümesinin bir NSMutableArray olduğundan emin misiniz? RemoveObjectAtIndex'e yanıt vermiyorsa: bu yalnızca bir NSArray olabilir. –

+1

Bu seçiciye yanıt vermezse, bir "NSMutableArray" değil. Doğru şekilde oluşturmayabilir veya yanlışlıkla bir ['copy' özelliği] kullanamazsınız (http://stackoverflow.com/questions/3220120/nsmutablearray-addobject-nsarrayi-addobject-unrecognized-selector-sent-to/3220137#3220137). Şüphe ediyorsanız, '-isKindOfClass:' kullanarak test etmeye çalışın. –

+0

umble, bu bir NSMutableArray değil, ancak: @interface ListOfVideo: UITableViewController {NSMutableArray * dataSet; } @property (nonatomic, retain) NSMutableArray * dataSet; ... // .m dosyasında @synthesize dataSet; – IssamTP

cevap

23

Sizin için NewsFetcher, dönüştürülemeyen bir örnek değil, immutable bir dizi döndürür. yerine aşağıdaki başlatma kullanın: A *a = (A*)b; gibi bir ifade yalnızca farklı türe işaretçi atmalarını

NSArray *results = [[NewsFetcher sharedInstance] 
        fetchManagedObjectsForEntity:@"News" 
        withPredicate:predicate 
        withDescriptor:@"Titolo"]; 
dataSet = [results mutableCopy]; 

- bu/dönüştürmek olarak işaret ettiği örneğinin gerçek türünü değiştirmez. '

+0

LMAO Çalışır. Ne bir noob'um. – IssamTP

5

DataSet'in bir NSMutableArray olduğunu doğrulayın. ExceptObjectAtIndex'e yanıt vermediği için istisna atılıyor.

+0

Mumble, bu bir NSMutableArray değil, ancak: @interface ListOfVideo: UITableViewController { \t NSMutableArray * dataSet; } @property (nonatomic, muhafaza) NSMutableArray * dataSet; ... // .m dosyasında @synthesize dataSet; – IssamTP

+2

Mümkün olan bir dizi için özellik, dizinin sihirli biçimde değişebilir hale gelmesini sağlamaz. –

+0

@Joshua, "sihirli bir şekilde" değişmez hale getirmezken, düzgün bir şekilde tanımlanamayacak şekilde değiştirilebilen bir dizinin değiştirilmesini önler. – BlackHatSamurai

1

jdot

dataSet = [NSMutableArray arrayWithArray:[[NewsFetcher sharedInstance] 
           fetchManagedObjectsForEntity:@"News" 
           withPredicate:predicate 
           withDescriptor:@"Titolo"]]; 

Şimdi veri kümesi Eğer NewsFetcher aldığım dizinin bir değişken örneğidir ..

Eğer bu şekilde yapmak zorundadır .. Doğru veri kümesi NSMutableArray olmalı ve o kazandı Nesneleri çıkarırken çökme.

+0

Bu benim problemimi çözdü! :) Teşekkürler @pankaj :) –

İlgili konular