0

我对目标 c 编程比较陌生,所以请不要因为这个问题而杀了我。目前我正在开发一个小程序,它应该能够对 mp4 文件的 id3 标签进行一些更改。我已经植入了 mp4v2 库,现在我正在尝试编写一种方法来读取特定文件的标签信息。我的问题是我无法将标签“contentRating”的值放入 NSUInteger 变量中。该库的引用说我得到了这样的值:“const uint8_t *”。但是我怎样才能把它放到一个 NSUInteger 变量中呢?非常感谢您提前提供的帮助!

这是我的代码:

- (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!
4

1 回答 1

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];

就您的代码而言,我的代码包含两种更改:

  1. 参数通过引用传递(因此您可以将值“传回”给调用者);

  2. *contentRating正在被转换为正确的类型(因为 NSUInteger 大于uint8_t,所以这个转换不会出现任何问题。

另一方面,我强烈建议创建一个类来保存有关歌曲的信息:

@interface MP3Info : NSObject
@property (nonatomic, retain) NSString* title;
...
@end

并重新声明您的方法,例如:

- (MP3Info*)getSongInfo:(NSString *)path;

希望能帮助到你。

于 2013-02-22T22:32:06.593 回答