Revision: 2615
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at March 14, 2007 13:35 by tgunr
Initial Code
NSMetadataQuery
(null)/(null)/(null) (null) | Permalink
NSMetadataQuery seems to have bugs and unable to get NSMetadataQueryResultContentRelevanceAttribute value.
Use MDQueryRef instead.
#import
@interface MyDocument : NSDocument
{
IBOutlet id field;
MDQueryRef _query;
}
- (IBAction)search:(id)sender;
@end
---------
#import "MyDocument.h"
@implementation MyDocument
- (id)init
{
self = [super init];
if (self) {
}
return self;
}
- (NSString *)windowNibName
{
return @"MyDocument";
}
- (void)windowControllerDidLoadNib:(NSWindowController *) aController
{
[super windowControllerDidLoadNib:aController];
}
- (IBAction)search:(id)sender
{
if( [[field stringValue] isEqualToString:@"" ] ) return;
NSString *predicateFormat = @"(kMDItemTextContent == \"?%@*\"c) && (kMDItemContentType != 'com.apple.mail.emlx') && (kMDItemContentType != 'public.vcard')";
_query = MDQueryCreate (
NULL,
[NSString stringWithFormat:predicateFormat,[field stringValue]],
[NSArray arrayWithObjects:kMDQueryResultContentRelevance,
kMDItemPath, kMDItemDisplayName, kMDItemFSName,nil ],
[NSArray arrayWithObject:kMDQueryResultContentRelevance]
);
MDQuerySetSearchScope (
_query,
[NSArray arrayWithObject:kMDQueryScopeComputer ],
0
);
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(finish) name:kMDQueryDidFinishNotification object:_query];
MDQueryExecute (
_query,
kMDQuerySynchronous
);
}
-(void)finish
{
[[NSNotificationCenter defaultCenter] removeObserver:self
name:nil
object:_query];
MDItemRef miref;
CFIndex idx;
idx = MDQueryGetResultCount(_query);
CFIndex hoge;
for( hoge = 0; hoge < idx; hoge++ )
{
miref = MDQueryGetResultAtIndex( _query, hoge);
NSString* name = (NSString*)MDItemCopyAttribute (
miref,
kMDItemFSName
);
NSString* path = (NSString*)MDItemCopyAttribute (
miref,
kMDItemPath
);
NSString* displayname = (NSString*)MDItemCopyAttribute (
miref,
kMDItemDisplayName
);
NSNumber* score = (NSNumber*)MDQueryGetAttributeValueOfResultAtIndex (
_query,
kMDQueryResultContentRelevance,
hoge
);
if( score != nil )
NSLog(@"score %f",[score floatValue]);
}
}
@end
Initial URL
http://homepage.mac.com/mnishikata/page2/page2.html
Initial Description
Initial Title
NSMetadataQuery
Initial Tags
osx
Initial Language
Objective C