2

私のアプリでは、の配列にNSDictionary別の があるかどうかを確認する必要がありますNSDictionary。つまり、JSONファイルを作成し、それをDocumentsに格納します。
今、この JSON を解析して新しいエントリを挿入しています。このエントリを JSON に挿入する前に、エントリが既にファイルに保存されているかどうかを確認する必要があります。JSONを解析したので:

// First I read the JSON file from the folder Documents
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"data.json"];
NSString *content = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL];
NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dictContent = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
// Json parsing
NSMutableArray *array = [[NSMutableArray alloc]init];
NSMutableArray *arrayOfDictData = [[NSMutableArray  alloc]init];
if (dictContent) {
  NSDictionary *sites = [dictContent objectForKey:@"sites"];
  NSArray *site = [sites objectForKey:@"site"];
  array = [site mutableCopy];
}

次に、HTML サイトから解析したデータを挿入した別のNSDictionary( ) があるので、辞書のデータがまだ JSON ファイルにあるかどうかを確認する必要があります。 どうすればそれを確認できますか?dictForJsondictForJson

dictForJson の構造は次のとおりです。

dictForJson = @{@"name": htmlTitle,
                    @"src": path,
                    @"expiryDate": expireDate};

NSArray サイトの構造は次のとおりです。

site: (
        {
        expiryDate = "29 Ago 2013";
        name = Sito4;
        src = "/Users/redoddity/Library/Application Support/iPhone Simulator/6.1/Applications/2D9EBE71-4365-448D-8AD2-A08749B8DBC1/Documents/Sito4.html";
    }
)

何か考えはありますか?で試しまし[array containsObject:dictForJson]たが、NSDictionary は順序付けられていないため、このメソッドを使用すると 0 が返される場合と 1 が返される場合があります。次のコードで JSON を構築すると便利です。

- (void)JsonCreateOrEdit {
    NSDictionary *dictSites = [[NSDictionary alloc]init];

    NSDictionary *dictSite = [[NSDictionary alloc]init];

    NSMutableArray *site = [[NSMutableArray alloc]init];

    NSDictionary *dictForJson = [[NSDictionary alloc]init];

    dictForJson = @{@"name": htmlTitle,
                    @"src": path,
                    @"expiryDate": expireDate};

    NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *filePath = [documentsPath stringByAppendingPathComponent:@"data.json"];
    BOOL fileExist = [[NSFileManager defaultManager] fileExistsAtPath:filePath];

    if (!fileExist) {
        [site addObject:dictForJson];
        dictSite = @{@"site": site};
        dictSites = @{@"sites": dictSite};
        // Creo il file Json
        NSLog(@"Il file non esiste");
        SBJsonWriter *writer = [[SBJsonWriter alloc]init];
        NSString *jsonCommand = [writer stringWithObject:dictSites];
        [CreateFile createFileIn:documentsPath with:@"data.json" andData:jsonCommand]; // This is a class method I made to create the file
    else {
        // Here there are the instructions to update the file data.json
         NSLog(@"Il file esiste");
    // Leggo il file json
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"data.json"];
    NSString *content = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL];
    NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary *dictContent = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
    // Faccio il parsing del json
    NSMutableArray *array = [[NSMutableArray alloc]init];
    NSMutableArray *arrayOfDictData = [[NSMutableArray  alloc]init];
    if (dictContent) {
        NSDictionary *sites = [dictContent objectForKey:@"sites"];
        NSArray *site = [sites objectForKey:@"site"];
        array = [site mutableCopy];
        // Here I must check if in the array site there are the same information I'm trying to insert
    }
}
4

2 に答える 2

0
NSPredicate *aPredicate = [NSPredicate predicateWithFormat:@"%K LIKE[c] %@", @"name", @"htmlTitle"];
NSArray *theFilteredArray = [mainArrayOfDictionry filteredArrayUsingPredicate:aPredicate];

if ([theFilteredArray count]){
    NSLog(@"Dictionay Exists");
}else{
     NSLog(@"Dictionay does not Exists");
}

最初のステートメントでは、最初のパラメーターは「キー」で、2 番目のパラメーターはディクショナリの実際の値です。

私は次のことを想定しています:

NSDictionary *dictForJson = @{@"name": htmlTitle,
                    @"src": path,
                    @"expiryDate": expireDate};


NSArray *mainArrayOfDictionry = (

"dictForJson" : @{@"name": htmlTitle,
                    @"src": path,
                    @"expiryDate": expireDate};
),
(),
(),
(),
.
.
.
)

お役に立てれば幸いです。*配列

于 2013-07-31T14:09:02.583 に答える