0

私はObjectiveCでのプログラミングに比較的慣れていないので、この質問で私を殺さないでください。現在、mp4ファイルのid3タグにいくつかの変更を加えることができるはずの小さなプログラムに取り組んでいます。mp4v2ライブラリを移植しましたが、特定のファイルのタグ情報を読み取るメソッドを作成しようとしています。私の問題は、タグ「contentRating」の値をNSUInteger変数に取得できないことです。ライブラリの参照によると、「constuint8_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];

あなたのコードに関して、私のコードには2種類の変更が含まれています。

  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 に答える