2

使い方がわかりませんが、NSCache の使い方のNSCasheトピックを読んで試してみましたが、うまくいきませんでした。

この問題の理由が表示されます: '-[NSCache setObject:forKey:cost:]: nil 値を挿入しようとしています (キー: indexPath)'

私は何か間違ったことをしていますか?

.h

@interface ViewController : UIViewController

@property (nonatomic, strong) NSMutableArray *jsonArray;

@property (nonatomic, strong) NSMutableArray *jsonArray1;

@property (nonatomic, retain) NSCache *Cache;

.m

- (void)viewDidLoad
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        NSData *response = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://kalkatawi.com/jsonTest.php"]];
        NSError *parseError = nil;
        jsonArray = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingAllowFragments error:&parseError];
        jsonArray1 = [[NSMutableArray alloc] init];
        Cache = [[NSCache alloc]init];
        for(int i=0;i<[jsonArray count];i++)
        {
            NSString  * city = [[jsonArray objectAtIndex:i] objectForKey:@"city"];

            [jsonArray1 addObject:city];
        }

        dispatch_sync(dispatch_get_main_queue(), ^{

            self.title = @"İller";

            [self.mytable1 reloadData];

            jsonArray1 = [Cache objectForKey:@"indexPath"];

            [Cache setObject:jsonArray1 forKey:@"indexPath"];

        });
    });
}
4

1 に答える 1

1

設定する直前に、jsonArray1 を初期化しています。

 jsonArray1 = [Cache objectForKey:@"indexPath"]; // here jsonArray1 = nil; hence remove this line and run your code again. Yo

 [Cache setObject:jsonArray1 forKey:@"indexPath"]; // hence you are setting nil value to this key "indexpath"

そのチュートリアルでは、彼らは次のように言っています

  • 値を設定するには、次の行を使用します。

[キャッシュ setObject:jsonArray1 forKey:@"indexPath"];

  • 値を取得するには、次の行を使用します。この行は、キャッシュされた値を使用する場合に使用する必要があります

jsonArray1 = [オブジェクトのキーをキャッシュ:@"indexPath"];

あなたの場合、コメントするだけです

jsonArray1 = [オブジェクトのキーをキャッシュ:@"indexPath"];

行して、もう一度実行します。そのエラーは発生しません。

于 2013-08-02T10:07:42.920 に答える