Weitere ähnliche Inhalte Kürzlich hochgeladen (20) iPhone勉強会 (2011.04.30) 全文検索 -Full Text Search on iOS-3. iPhone SDK
•
touch •
on
the
WEB
•LDR
touch •
• •i‐Radio
•LCD
Clock •
•Subway
Map •
•MyWebClip
• •
8. iPhone SDK
(SQLite? CoreData? and so on...)
•
•
9. iPhone SDK
Library
Tokyo Cabinet
http://fallabs.com/tokyocabinet/
Tokyo Dystopia
http://fallabs.com/tokyodystopia/
BNRPersistence
https://github.com/hillegass/BNRPersistence
11. iPhone SDK
Sample Code
FTSKit
https://github.com/kishikawakatsumi/FTSKit
13. iPhone SDK
#import "FKStoredObject.h"
@interface Address : FKStoredObject {
NSString *zipcode;
NSString *full;
NSString *kana;
}
@property (nonatomic, retain) NSString *zipcode;
@property (nonatomic, retain) NSString *full;
@property (nonatomic, retain) NSString *kana;
@end
14. iPhone SDK
#import "FKStoredObject.h"
@interface Address : FKStoredObject {
NSString *zipcode;
NSString *full;
NSString *kana;
}
@property (nonatomic, retain) NSString *zipcode;
@property (nonatomic, retain) NSString *full;
@property (nonatomic, retain) NSString *kana;
@end
15. @implementation Address
iPhone SDK
- (void)readContentFromBuffer:(FKDataBuffer *)d {
[zipcode release];
zipcode = [[d readString] retain];
[full release];
full = [[d readString] retain];
[kana release];
kana = [[d readString] retain];
}
- (void)writeContentToBuffer:(FKDataBuffer *)d {
[d writeString:zipcode];
[d writeString:full];
[d writeString:kana];
}
@end
17. iPhone SDK
FKStore
FKStoreBackend
FKIndexManager
18. iPhone SDK
self.store = [[[FKStore alloc] init] autorelease];
FKTCBackend *backend =
[[FKTCBackend alloc] initWithPath:dataPath
error:nil];
[store setBackend:backend];
[backend release];
FKTCIndexManager *indexManager =
[[FKTCIndexManager alloc] initWithPath:dataPath
error:nil];
[store setIndexManager:indexManager];
[indexManager release];
[store addClass:[Address class]];
19. iPhone SDK
// Mark object for insertion into object store
- (void)insertObject:(FKStoredObject *)obj;
// Mark object for deletion from object store
- (void)deleteObject:(FKStoredObject *)obj;
// Mark object to be updated in object store
- (void)willUpdateObject:(FKStoredObject *)obj;
- (BOOL)saveChanges:(NSError **)errorPtr;
20. iPhone SDK
CSVParser *parser = [[[CSVParser alloc]
initWithString:csvString
separator:@","
hasHeader:YES
fieldNames:nil] autorelease];
NSArray *lines = [parser arrayOfParsedRows];
for (NSDictionary *line in lines) {
Address *record = [[Address alloc] init];
record.zipcode = [line objectForKey:@" "];
record.full = [line objectForKey:@" "];
record.kana = [line objectForKey:@" "];
[store insertObject:record];
[record release];
}
[store saveChanges:nil];
22. iPhone SDK
- (FKResultSet *)resultSetForClass:(Class)c
mactchesText:(NSString *)text
forKey:(NSString *)key;
- (FKResultSet *)resultSetForClass:(Class)c
containsText:(NSString *)text
forKey:(NSString *)key;
- (FKResultSet *)resultSetForClass:(Class)c
beginsWithText:(NSString *)text
forKey:(NSString *)key;
- (FKResultSet *)resultSetForClass:(Class)c
endsWithText:(NSString *)text
forKey:(NSString *)key;
23. NSString *text = searchText;
iPhone SDK
NSString *key = @"kana";
FKResultSet *resultSet;
if (searchType == FKSearchTypeStartsWith) {
resultSet = [store resultSetForClass:[Address class]
beginsWithText:text
forKey:key];
} else if (searchType == FKSearchTypeEndsWith) {
resultSet = [store resultSetForClass:[Address class]
endsWithText:text
forKey:key];
} else if (searchType == FKSearchTypeContains) {
resultSet = [store resultSetForClass:[Address class]
containsText:text
forKey:key];
} else {
resultSet = [store resultSetForClass:[Address class]
mactchesText:text
forKey:key];
}
34. iPhone SDK
- (void)searchBar:(FKSearchBar *)searchBar
textDidChange:(NSString *)searchText {
[NSObject
cancelPreviousPerformRequestsWithTarget:self];
[self performSelector:@selector(searchWithSearchBar:)
withObject:searchBar
afterDelay:0.2];
}
35. - (void)searchWithSearchBar:(FKSearchBar *)searchBar {
iPhone SDK
[queue cancelAllOperations];
NSString *searchText = searchBar.text;
if ([searchText length] == 0) {
self.resultSet = nil;
[listView reloadData];
return;
}
FKSearchOperation *searchOperation =
[[FKSearchOperation alloc] init];
searchOperation.delegate = self;
searchOperation.store = store;
searchOperation.searchText = searchText;
searchOperation.searchType = searchBar.searchType;
[queue addOperation:searchOperation];
[searchOperation release];
}
- (void)searchOperaionDidFinished:(FKResultSet *)results {
self.resultSet = results;
[listView reloadData];
}
39. iPhone SDK
const CFStringRef kCFStringTransformStripCombiningMarks;
const CFStringRef kCFStringTransformToLatin;
const CFStringRef kCFStringTransformFullwidthHalfwidth;
const CFStringRef kCFStringTransformLatinKatakana;
const CFStringRef kCFStringTransformLatinHiragana;
const CFStringRef kCFStringTransformHiraganaKatakana;
const CFStringRef kCFStringTransformMandarinLatin;
const CFStringRef kCFStringTransformLatinHangul;
const CFStringRef kCFStringTransformLatinArabic;
const CFStringRef kCFStringTransformLatinHebrew;
const CFStringRef kCFStringTransformLatinThai;
const CFStringRef kCFStringTransformLatinCyrillic;
const CFStringRef kCFStringTransformLatinGreek;
const CFStringRef kCFStringTransformToXMLHex;
const CFStringRef kCFStringTransformToUnicodeName;
const CFStringRef kCFStringTransformStripDiacritics;
40. iPhone SDK
NSString *text = searchText;
NSMutableString *toKana =
[NSMutableString stringWithString:text];
CFRange range = CFRangeMake(0, [text length]);
CFStringTransform((CFMutableStringRef)toKana,
&range,
kCFStringTransformHiraganaKatakana,
false);
text = toKana;
CF~ NS~ (toll-free bridge)
Cocoa
※UI~
43. NSArray *sortedArray;
iPhone SDK
NSNumber *target = [NSNumber numberWithInteger:10];
CFIndex count = [sortedArray count];
CFRange range = CFRangeMake(0, count);
AData *data = nil;
CFIndex index = CFArrayBSearchValues(
(CFArrayRef)sortedArray,
range,
target,
compareAData,
NULL);
if(index < count) {
data = [sortedArray objetAtIndex:index];
} else {
// Not found.
}
if(NSOrderedSame != [data.number compare:target]) {
// Not found.
}
44. NSBinarySearchingOptions
iPhone SDK
Options for searches and insertions using
indexOfObject:inSortedRange:options:usingComparator:.
enum {
NSBinarySearchingFirstEqual = (1 << 8),
NSBinarySearchingLastEqual = (1 << 9),
NSBinarySearchingInsertionIndex = (1 << 10),
};
typedef NSUInteger NSBinarySearchingOptions;
Constants
NSBinarySearchingFirstEqual
Specifies that the search should return the first object in the range that is equal to the given object.
Available in iOS 4.0 and later.
Declared in NSArray.h.
NSBinarySearchingLastEqual
Specifies that the search should return the last object in the range that is equal to the given object.
Available in iOS 4.0 and later.
Declared in NSArray.h.
NSBinarySearchingInsertionIndex
Returns the index at which you should insert the object in order to maintain a sorted array.
Available in iOS 4.0 and later.
Declared in NSArray.h.
47. iPhone SDK
- (NSString *)stringByAddingPercentEscapesUsingEncoding:
(NSStringEncoding)encoding
- (NSString
*)stringByReplacingPercentEscapesUsingEncoding:
(NSStringEncoding)encoding
48. iPhone SDK
CFStringRef CFURLCreateStringByReplacingPercentEscapes (
CFAllocatorRef allocator,
CFStringRef originalString,
CFStringRef charactersToLeaveEscaped
);
CFStringRef
CFURLCreateStringByReplacingPercentEscapesUsingEncodin
g(
CFAllocatorRef allocator,
CFStringRef origString,
CFStringRef charsToLeaveEscaped,
CFStringEncoding encoding
);
Hinweis der Redaktion \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n