0
我想弄清楚的查询上的plist最好的办法。因此,试图在做一个SQL相当于等等和soforth ...使用的plist作为SQL表相当于 “SELECT * FROM sometable WHERE somecol = someval AND someothercol = someotherval AND” ......。来自Ruby和MySQL,这只是一个简单的查询很多代码。结果如预期般回复(至少在第一次运行时他们做了,我没有严格测试),没有任何错误。SQL SELECT语句相当于查询上的plist
因此,这里的问题:有没有在某个地方的文档一些简单的方法隐藏,这将使这个少笨重? 如果不是什么更好的方法?
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);
好像你正在编写更多的代码,并获得最差而不仅仅是使用CoreData或sqlite。当您使用一系列plists来模拟数据库中的表时,为什么不使用数据库或CoreData? – bryanmac
概括地说,我只有1个月让我的项目出了门。我只做了大约一个月左右的Objective-C。一切从我研究,我已经看过了代码示例,在我看来,对于所有其他替代的Plist学习曲线的时间内我有太陡。根据我的情况,你会推荐什么?从您的角度来看,数据存储的复杂程度与数据库或核心数据方法一样复杂吗?也许我对整个数据存储主题的方向是错误的。 – iamtoc
我真的项目是很简单的我没有预料到的,学习核心数据的需要,这个月至少不会。从我所有的计算结果和项目的规格来看,我刚才确定了plists就足够了。 – iamtoc