SQL оператор выбора эквивалентен для запроса на plist - PullRequest
0 голосов
/ 30 августа 2011

Я пытаюсь найти лучший подход для запросов на листе. Таким образом, попытка сделать SQL-эквивалент "SELECT * FROM sometable WHERE somecol = someval AND someothercol = someotherval AND" .... и т. Д. И далее ... используя plist в качестве эквивалента таблицы SQL. Исходя из Ruby и mysql, это кажется большим количеством кода для одного простого запроса. Результаты возвращаются, как и ожидалось (по крайней мере, при первом запуске, я не проверял это строго) без ошибок.

Итак, вот вопрос: есть ли какой-нибудь простой метод, скрывающийся где-то в документах, который бы сделал это менее неуклюжим? а если нет, то какой подход лучше?

EPFramework.m

// LOAD PLIST AND FILTER MULTIPLE TIMES
-(NSMutableArray *)loadPlistAndFilterMultipleTimes:(NSString *)plist ArrayOfKeys:(NSArray *)arrayOfKeys ArrayOfKeyValues:(NSArray *)arrayOfKeyValues
{

// set the array counts
int arrayOfKeysCount = [arrayOfKeys count];
int arrayOfKeyValuesCount = [arrayOfKeyValues count];

// initialize the array to return
NSMutableArray *arrayFilteredResults = [[[NSMutableArray alloc] init] retain];

// qualify the search
if(arrayOfKeysCount == arrayOfKeyValuesCount && arrayOfKeysCount > 0 && arrayOfKeyValuesCount > 0)
{

    // get the plist
    NSString *fullFileName = [NSString stringWithFormat:@"%@.plist", plist];
    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:fullFileName];

    // put the plist records into an array
    NSArray *arrayOfDictionaryItemsInPlist = [[NSMutableArray alloc] initWithContentsOfFile:path];

    // load our dynamic array for mutability throughout the loops
    NSMutableArray *arrayFiltered = [[[NSMutableArray alloc] initWithArray:arrayOfDictionaryItemsInPlist] retain];

    // build an array of the final results to return
    for(int i=0; i < arrayOfKeysCount; i ++)
    {

        // initialize this loops search criteria
        NSString *key = [arrayOfKeys objectAtIndex:i];
        id value = [arrayOfKeyValues objectAtIndex:i];

        // set the filter
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@", key, value];

        // filter the result
        arrayFilteredResults = [[[NSArray alloc] initWithArray:[arrayFiltered filteredArrayUsingPredicate:predicate]] retain];

    } 
} else {
    NSLog(@"arrOfKeys count does not match arrayOfKeyValues count"); // the search did not qualify
}


// return the results
return arrayFilteredResults;    

// release the allocated memory
[arrayFilteredResults release];     

}

IndexController.m

NSArray *arrayOfKeys = [NSArray arrayWithObjects:
                         [NSString stringWithString:@"recordset"],
                         [NSString stringWithString:@"ep_object_attribute_id"], 
                         nil];

NSArray *arrayOfKeyValues = [NSArray arrayWithObjects:
                             [NSString stringWithString:@"1778587279"], 
                             [NSNumber numberWithInt:133], 
                             nil];

NSMutableArray *arrayOfResult = [epFrameWork loadPlistAndFilterMultipleTimes:@"FormEntries" ArrayOfKeys:arrayOfKeys ArrayOfKeyValues:arrayOfKeyValues];
NSLog(@"arrayOfResult: %@", arrayOfResult);

1 Ответ

2 голосов
/ 30 августа 2011

Вот ссылка для fmdb.Быстрее забрать его, быть быстрее, и вы получите реальную базу данных вместо того, чтобы смоделировать ее с помощью списков:)

https://github.com/ccgus/fmdb

Надеюсь, что это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...