我对目标c的编程比较陌生,所以请不要因为这个问题而杀了我。 目前我正在开发一个小程序,它应该能够对mp4文件的id3标签进行一些更改。我已经植入了mp4v2库,现在我正在尝试编写一个读取特定文件的标签信息的方法。 我的问题是我无法将标签“contentRating”的值转换为NSUInteger var。库的引用说我得到这样的值:“const uint8_t *”。 但是我如何将它放入NSUInteger var? 非常感谢您的帮助!
继承我的代码:
- (void)getSongInfo:(NSString *)path
title:(NSString *)t
album:(NSString *)alb
artist:(NSString *)art
rating:(NSUInteger *)r
albumart:(NSData *)aArt {
// Transform path in const char
const char *cPath = [path cStringUsingEncoding:NSASCIIStringEncoding];
// Load File
MP4FileHandle mp4File = MP4Modify(cPath);
// Create Tag var
const MP4Tags* tags = MP4TagsAlloc();
// Get Tags
MP4TagsFetch(tags, mp4File);
// Get Titel + Album + Interpret + Rating
t = [NSString stringWithUTF8String:tags->name];
alb = [NSString stringWithUTF8String:tags->album];
art = [NSString stringWithUTF8String:tags->artist];
r = tags->contentRating; <-- My Problem!
答案 0 :(得分:1)
你可以这样做:
- (void)getSongInfo:(NSString *)path
title:(NSString **)t
album:(NSString **)alb
artist:(NSString **)art
rating:(NSUInteger *)r
albumart:(NSData **)aArt {
...
// Get Titel + Album + Interpret + Rating
*t = [NSString stringWithUTF8String:tags->name];
*alb = [NSString stringWithUTF8String:tags->album];
*art = [NSString stringWithUTF8String:tags->artist];
*r = (NSUInteger)(*tags->contentRating); <-- My Problem!
您可以像这样调用此代码:
NSString* title = nil;
NSString* album = nil;
NSString* artist = nil;
NSUInteger rating = 0;
NSData* albumArt = nil;
[self getSongInfo:path title:&title album:&album artist:&artist rating:&rating albumArt:&albumArt];
尊重您的代码,我的代码包含两种更改:
参数通过引用传递(因此您可以将值“传回”给调用者);
*contentRating
正在被转换为正确的类型(因为NSUInteger大于uint8_t
,此演员阵容不会出现任何问题。
另一方面,我强烈建议创建一个类来保存有关歌曲的信息:
@interface MP3Info : NSObject
@property (nonatomic, retain) NSString* title;
...
@end
并重新启动您的方法,如:
- (MP3Info*)getSongInfo:(NSString *)path;
希望它有所帮助。